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.