Einzelnen Beitrag anzeigen

stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#1

DLL Delphi 10.1 Definition von char*

  Alt 20. Apr 2017, 13:01
Hallo zusammen,

ich habe eine kurze Frage, welche ca so schon in dem asignRKCOM DLL Thread gestellt wurde.

ich habe Funktionen aus einer DLL. Beispiel:
Code:
long test(char* buffer, long *buffersize);
long test2(char* bufferVontest);
Diese habe ich dann als Delphi Funktion definiert mit
Code:
function test(buffer:pansichar;buffersize:plongint):long; stdcall; external 'test.dll';
function test2(bufferVontest:pansichar):long; stdcall; external 'test.dll';
Ich rufe diese auf mit:
Code:
var
b:pansichar;
l:plongint;

s:string;

begin
b  := nil;
l  := AllocMem(1) ;
test(b,l); // <- Funktion gibt bei b = nil in l die Länge zurück. Dies ist IMMMER z.b 20 Zeichen
b  := PAnsiChar(AllocMem(l^ +1 )); // Hier Größe von b durch die Länge in l definieren
test(b,l);

s:=strpas(b);

test2(pansichar(s)); // Ergibt einen Fehler das s eine falsche Länge hat
test2(b); // Ergibt OK und keinen Fehler


end;
Mein Problem an der ganzen Sache ist, das ich danach eine zweite Funktion aus der DLL habe, welche als Argument das Ergebnis aus der Variable b mitgegeben bekommt.
Gebe ich dieser Funktion dann das Resultat meiner Funktion mytest mit pansichar(mytest) mit, dann lehnt die Funktion dies ab da die Länge nicht stimmt. Die Länge soll z.b immer 20 Zeichen sein.
Übergebe ich aber hingegen direkt die Variable b ( z.b durch direkten Aufruf dahinter ), dann ist das Argument in Ordnung.

Wo ist hier mein Denk/Ansatzfehler.
  Mit Zitat antworten Zitat