Einzelnen Beitrag anzeigen

Andre1

Registriert seit: 19. Nov 2016
8 Beiträge
 
#1

Access violation in System._DynArrayClear

  Alt 11. Sep 2020, 13:48
Delphi-Version: 10.2 Tokyo
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;
  Mit Zitat antworten Zitat