![]() |
DLL Delphi 10.1 Definition von char*
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:
Diese habe ich dann als Delphi Funktion definiert mit
long test(char* buffer, long *buffersize);
long test2(char* bufferVontest);
Code:
Ich rufe diese auf mit:
function test(buffer:pansichar;buffersize:plongint):long; stdcall; external 'test.dll';
function test2(bufferVontest:pansichar):long; stdcall; external 'test.dll';
Code:
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.
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; 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. |
AW: DLL Delphi 10.1 Definition von char*
Dein ganzer Code ist ziemlich umständlich. Normalerweise macht man das so:
Delphi-Quellcode:
Zum Fehler bei
var
Len: LongInt; Buf: array of AnsiChar; begin Test(nil, @Len); SetLength(Buf, Len); FillChar(Buf[0], SizeOf(Buf), #0); // -> je nachdem, ob die Dll-Funktion selbstständig nullterminiert, oder nicht Test(@Buf[0], @Len);
Delphi-Quellcode:
führt, dass du deine Rückgabe mit
test2
Delphi-Quellcode:
einem normalen String zuweist. In deiner Delphi-Version sind Strings aber Unicode und nicht ASCII.
StrPas
|
AW: DLL Delphi 10.1 Definition von char*
Verstehe. Klingt logisch.
Ich habe das letzte mal auf DLL Dateien mit Delphi 6 zugegriffen und da gab es kein Unicode. :lol: d.h ich kann auch per
Code:
das Argument weitergeben.
pansichar(ansistring(s))
Gerade getestet und es funktioniert. Danke für die schnelle Antwort. |
AW: DLL Delphi 10.1 Definition von char*
Zitat:
Zitat:
Und grundsätlich kann man erstmal CHAR im C eher mit einem BYTE in Delphi gleichsetzen. Gut, eigentlich ist CHAR ein ShortInt und UCHAR ein Byte (U von Unsignet und nicht von Unicode) Der Typ Char in Delphi ist ein compilerabhängiger Alias, welcher für AnsiChar oder WideChar steht. |
AW: DLL Delphi 10.1 Definition von char*
Zitat:
Gerade mal alles aufgeräumt und auch System.AnsiStrings für strpas eingebunden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz