Mein Vorschlag wäre ja das ganze aufzusplitten:
in der
DLL zwei Funktionen:
Delphi-Quellcode:
function GetNetworkAdapterCount: integer;
function GetNetworkAdapter(index: integer; buffer: PChar; size: integer): integer;
Der Aufruf müsste dann nach folgendem Schema erfolgen (Pseudocode):
Code:
ac = GetNetworkAdapterCount;
for i = 0 to ac - 1
begin
size = GetNetworkAdapter(i, nil, 0);
-> erstelle einen Buffer mit der Länge size
GetNetworkAdapter(i, buffer, size);
-> verwende Buffer weiter.. z.B. als String
in eine Stringlist oder in ein Array
end;
GetNetworkAdapter wird also 2 mal pro Wert aufgerufen.
Im ersten Aufruf weiss die
DLL durch buffer = nil dass sie die Länge des Strings zurückgeben muss.
Beim zweiten Aufruf
kopiert sie den String aus der
DLL in den Buffer der ja in der Anwendung selbst definiert ist. Wichtig ist das kopieren, denn wenn der Buffer in der
DLL freigegeben wird, ist nicht sicher ob da wirklich noch daten drin sind.
Alternativ kannst du wie oben schon erwähnt auch callbacks einsetzen.