Bekomme ich hier was nicht mit?
Man kann doch dynamische Arrays aus einer
DLL zurückgeben...
Delphi-Quellcode:
library xyz;
uses
...
type
TTestArray = array of ShortString;
function GetTestArray: TTestArray; stdcall;
begin
SetLength(Result, 3);
Result[0] := 'Hallo';
Result[1] := 'Welt';
Result[2] := '!';
end;
exports
GetTestArray;
end.
Delphi-Quellcode:
program test_xyz;
interface
type
TTestArray = array of ShortString;
...
var GetTestArray: function: TTestArray; stdcall;
implementation
procedure TestItOut;
var
a: TTestArray;
i: Integer;
hDLL: THandle;
begin
hDLL := LoadLibrary('xyz.dll');
if hDLL <> 0 then
begin
GetTestArray := GetProcAddress(hDLL, 'GetTestArray');
if GetTestArray <> nil then
begin
a := GetTestArray;
ShowMessage(IntToStr(Length(a))); // Eine schicke "3" erscheint als Meldung
for i := Low(a) to High(a) do
ShowMessage(a[i]); // Hallo *click* Welt *click* ! *click*
SetLength(a, 0);
GetTestArray := nil;
end;
FreeLibrary(hDLL);
end;
end;
*Edit: "Testprogramm" um dynamisches Einbinden der Funktion erweitert
Debuggers don't remove Bugs, they only show them in Slow-Motion.