Ich hab auch mal was ausprobiert und es klappt auch:
Delphi-Quellcode:
//Programm, dass die DLL benutzt
type
TArray =
array of string;
function GimmeAnArray(str:
string): TArray;
type
TMeineDllFunk =
function (str: PChar): pointer;
PArray = ^TArray;
var
hinst: cardinal;
func: TMeineDllFunk;
arrlen, i: integer;
arr: PArray;
begin
hinst := LoadLibrary('
arraydll.dll');
try
if hinst > 0
then
begin
@func := GetProcAddress(hinst, '
GimmeAnArray');
if @func <>
NIL then
begin
arr := func(PChar(str));
setlength(result, length(arr^));
for i := 0
to high(result)
do
begin
result[i] := Arr^[i];
UniqueString(result[i]);
end;
arr :=
nil;
end;
end;
except
FreeLibrary(hinst);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
arr: TArray;
begin
arr := GimmeAnArray('
HUHU');
for i := 0
to high(arr)
do
Memo1.Lines.Add(arr[i])
end;
Delphi-Quellcode:
//Die DLL
var
arr:
array of string;
function GimmeAnArray(str: PChar): integer;
var
i: integer;
data:
string;
begin
data := str;
setlength(arr, length(str));
for i := 0
to high(arr)
do
arr[i] := data[i+1];
result := Integer(@arr);
end;
exports
GimmeAnArray;
begin
end.
Ich weiß jetzt nicht, welche Version von den geposteten hier besser ist, diese Funktioniert auf jeden Fall mit Pointern.