Ä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;