![]() |
C Dll benutzen mit Char*
Moin !
Ich habe hier eine C DLL die ich benutzen müsste. Darin gibt es diese Funktion:
Code:
In Delphi habe ich nun einen Funktionsprototypen definiert:
int EncryptPassword(char* password, char* crypted_password, int bufsize)
Delphi-Quellcode:
Die DLL wird dann dynamisch geladen und DLLFunc erhält den Pointer auf die Funktion in der DLL (@DLLFunc := GetProcAddress(DLLHandle, 'EncryptPassword');). Das klappt auch.
type
TDLLFunc = function(pass: PChar; passCry: PChar; lenBuffer: Integer): Integer; stdcall; var DLLFunc: TDLLFunc Nun versuche ich die Funktion zu benutzen und ich denke ich habe da noch irgendeinen Bug drin. Nebenbei ... Die Funktion bekommt einen String und liefert einen verschlüsselten String zurück. Das ist mein derzeitiger Versuch:
Delphi-Quellcode:
Nur leider kommt da nix brauchbares bei raus. Ich denke mal es liegt an meiner Nutzung von PChar.
var
Buffer : PChar; test : PChar; begin GetMem(Buffer, 20); GetMem(test, 4); test := PChar('!!!!'); len := DLLFunc(@test, @Buffer, 20); ShowMessage(PChar(Buffer)); ... Kann mir ggf. jemand einen Tip geben was ich hier anpassen/ergänzen muss? |
AW: C Dll benutzen mit Char*
Zitat:
|
AW: C Dll benutzen mit Char*
Hallo,
versuch mal PChar durch PAnsiChar zu ersetzen. Außerdem brauchst du für deine Variable "test" keinen Speicher zu reservieren, wenn du danach
Delphi-Quellcode:
schreibst. Das verschafft dir nur ein Memory-Leak. Und deine Buffer-Variable solltest du mit FreeMem auch wieder freigeben ;)
test := PChar('!!!!');
Edit: Das was uligerhardt geschrieben hat kommt noch dazu.. Hatte ich ganz übersehen. Gruß Neutral General |
AW: C Dll benutzen mit Char*
Moin !
Ich habe es nun mit PAnsiChar und auf PWideChar getestet, aber in beiden Fällen klappt es nicht.
Delphi-Quellcode:
try
GetMem(Buffer, 20); test := PWideChar('!!!!'); len := DLLFunc(test, Buffer, 20); ShowMessage('Len : ' + IntToStr(len) + #13#10 + 'Erg : ' + Buffer); finally FreeMem(Buffer); end; Zitat:
|
AW: C Dll benutzen mit Char*
Was heißt "klappt nicht"? Welchen Wert bekommst Du denn zurück?
|
AW: C Dll benutzen mit Char*
benutze pChar und gebrauche cdecl instead of stdcall. (is a c dll right)
this should solve your problem. |
AW: C Dll benutzen mit Char*
Mal ein anderer Ansatz:
Delphi-Quellcode:
Und auch mal mit cdecl versuchen wie bereits erwähnt.
var
Buffer, test: {Ansi}string; begin SetLength(Buffer, 20); test := '!!!!'; len := DLLFunc(P{Ansi}Char(test), @Buffer[1], Length(Buffer) * SizeOf(char)); ShowMessage(Buffer); |
AW: C Dll benutzen mit Char*
Zitat:
|
AW: C Dll benutzen mit Char*
Moin !
Inzwischen funktioniert es. Es war noch ein Bug in der DLL. @uligerhardt: Danke für den Hinweis. @DeddyH: Diese Variante funktioniert genauso wie meine erst genannte. Ich danke für die zahlreichen Hinweise !! :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 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