Hi,
ich rufe aus einer Bibliothek eine Funktion auf. Diese gibt mir
die Adresse zu einem String Array und die Anzahl der Einträge.
Showmessage funktioniert und mir werden die Strings angezeigt.
Allerdings kommt es beim Verlassen der Funktion getRecipients
zu einer
Access Violation hier:
System.SysFreeMem(Opt.out
System._FreeMem(???)
System._DynArrayClear(nil, ???)
Ich vermute es hängt mit der Variable "arr" zusammen.
Was muss ich machen, damit keine
Access Violation kommt?
Viele Grüße
André
Delphi-Quellcode:
type
TPWideCharArray = array of PWideChar;
PPWideChar = ^PWideChar;
PPPWideChar = ^PPWideChar;
PNativeInt = ^NativeInt;
PPNativeInt = ^PNativeInt;
procedure db_call_method_RecipientsManager_getRecipients(ptr: NativeInt;
argv: PPPWideChar; argc: PPNativeInt); stdcall; external 'sample.dll';
function RecipientsManager.getRecipients: TArray<String>;
var
argv: PPWideChar;
argc: PNativeInt;
i: NativeInt;
str: string;
arr: TPWideCharArray;
begin
db_call_method_RecipientsManager_getRecipients(nativeRef, @argv, @argc);
Result := Tarray<string>.create();
SetLength(result, argc^);
arr := TPWideCharArray(argv);
for i := 0 to argc^ - 1 do
begin
str := WideCharToString(arr[i]);
result[i] := str;
Showmessage(str);
end;
end;