Einzelnen Beitrag anzeigen

Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#4

Re: C++-DLL --> Delphi - dynamischer struct-Array?

  Alt 20. Jun 2007, 14:43
Änderungen:

1) "packed record" statt "record", da die DLL aus der C-Welt kommt
2) Definition und Deklaration eines typisierten Pointers ("PContactManagerSOAP_ContactType")
3) Funktionsdeklaration angepasst


Beim Aufrufen der Funktion wird in der DLL ein Array erstellt/umkopiert/etc, so dass die Variable auf das erste Array-Element zeigt.
Wie oben schon geschrieben, darf man kein "array of" nutzen!

ContactType zeigt auf das erste Element im Array. Anhand des Rückgabewertes (Name: count) kennt man die Anzahl der Elemente im Array und kann diese In eienr Schleife durchlaufen, in dem man den typisierten Pointer bei jedem Durchlauf weiterschiebt.



Delphi-Quellcode:
type
    PContactManagerSOAP_ContactType = ^ContactManagerSOAP_ContactType;
   ContactManagerSOAP_ContactType = packed record
// a: INT64;
// b: PChar;
      c: Integer;
   end;

function _ContactManagerSOAP_GetContactTypes(result: PContactManagerSOAP_ContactType) : Integer; cdecl; external '../DLL/ObjectWebservice.dll';

implementation

{$R *.dfm}

procedure TDataDisplayForm.btnGetContactTypesClick(Sender: TObject);
var
  ContactTypes: PContactManagerSOAP_ContactType;
  i, count: Integer;
begin
  count := _ContactManagerSOAP_GetContactTypes(ContactTypes);

  for i := 0 to count -1 do
  begin
    ShowMessage(IntToStr(ContactTypes^.c));
    Inc(ContactTypes);
  end;

// TODO:
// der DLL mitteilen, dass der Speicher wieder freigegeben werden kann
end;
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat