So, integer-Arrays etc kann ich jetzt super übergeben. Doch mit Strings habe ich meine Probleme. Mache es so, wie mit den Integern nur frage ich erst nach der Länge der Strings:
Delphi-Quellcode:
function createArray: pointer; stdcall;
var
StringArray: Array of String;
begin
SetLength(StringArray, 2);
StringArray[0]:='11';
StringArray[1]:='32';
result:=pointer(StringArray);
end;
function getElementByIndex(Buffer: PChar; BufferLen, Index: Integer; p: Pointer;): Integer; stdcall;
var
StringArray: TStringArray;
Element: String;
begin
StringArray:=TStringArray(p);
Element:=IntArray[index];
if Assigned(Buffer) then
StrLCopy(Buffer, PChar(Element), BufferLen);
result:=Length(High)
pointer(StringArray):=nil;
end;
In der Hauptanwendung sieht der Code so aus:
Delphi-Quellcode:
type
TStringArray = array of String;
...
procedure TForm2.GetArray;
var
len: Integer;
Buffer: PChar;
zeiger: Pointer;
StringArray: TStringArray;
s: String;
begin
zeiger:=TStringArray(createArray);
StringArray:=zeiger;
len:=getArrayElement(nil, 0, 1, zeiger);
try
GetMem(Buffer, len+1);
len:=getArrayElement(Buffer, len+1, 1, zeiger);
s:=String(Buffer);
finally
FreeMem(Buffer);
end;
ShowMessage(s);
end;
Das Resultat ist einfach ein leerer String. Aber keine A/V - Auch nicht beim beenden des Programms...
Danke im Voraus