![]() |
Re: C++ DLL in Delphi einbinden
Zitat:
|
Re: C++ DLL in Delphi einbinden
Hab nochmals ne abschließende Frage. :oops:
Habe soweit alle Funktionen nun umsetzen können, allerdings fehlt mir noch eine. Sie ist zwar nicht wirklich wichtig, allerdings würd ich schon gern wissen, was ich dort falsch machen. Bzw. möcht ich gern den richtigen Umgang mit Pointern lernen. Um die Version des Treibers zu erfahren gibt es folgende Funktion:
Code:
Nach Unmengen von Umstellungen und Versuchen ist das mein momentaner Stand,Prototype eResult GetLibraryVersion( char* pLibVersion, char* pInterfaceVersion ); pLibVersion: Pointer to a character buffer which receives the lib version (max. size 12). pInterfaceVersion: Pointer to a character buffer which receives the interface version (max. size 12) Return Result value as defined in eResult enumeration type. der ja allerdings nicht funktioniert... Definition der Procedure
Delphi-Quellcode:
function GetLibraryVersion(pLibVersion: Pointer;
pInterfaceVersion: Pointer): Integer; cdecl; external 'lib\PlayerLib.dll'; Die Imlementierung stell ich mir so vor:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var eResult: Integer; LibVersion, InterfaceVersion: PChar; pLibVersion, pInterfaceVersion: ^PChar; sLibVersion, sInterfaceVersion: String; begin LibVersion := '0'; InterfaceVersion := '0'; pLibVersion := @LibVersion; pInterfaceVersion := @InterfaceVersion; eResult := GetLibraryVersion(pLibVersion, pInterfaceVersion); LibVersion := @pLibVersion; InterfaceVersion := @pInterfaceVersion; sLibVersion := LibVersion; sInterfaceVersion := InterfaceVersion; Label3.Caption := sLibVersion + ' / ' + sInterfaceVersion + ' / ' + IntToStr(eResult); end; Fehler ist natürlich eine Zugriffsverletzung beim Lesen. Dabei wird auch das CPU-Fenster aufgepoppt, wobei mir die Anweisung dort (nennt man das Assembler??) natürlich noch viel weniger sagen, als der Rest. Würd mich freuen, wenn Ihr mir heir nochmals zur Hand gehen könntet! Wird wohl wieder ein Fehler bei der Konvertierung sein, oder? Ich danke Euch! Gruß, Andru |
Re: C++ DLL in Delphi einbinden
Der Fehler liegt darin das Puffer gebraucht werden. Solche mit mindestens 12 Chars.
Delphi-Quellcode:
function GetLibraryVersion(pLibVersion: PChar;
pInterfaceVersion: PChar): Integer; cdecl; external 'lib\PlayerLib.dll'; procedure TForm1.Button2Click(Sender: TObject); var eResult: Integer; // ein Zeichen mehr zur Sicherheit kann nicht schaden LibVersion, InterfaceVersion: array [0..12] of Char; begin // leere C Strings bestehen aus einem 0-Byte nicht der Ziffer '0' LibVersion[0] := #0; InterfaceVersion[0] := #0; eResult := GetLibraryVersion(LibVersion, InterfaceVersion); Label3.Caption := LibVersion + ' / ' + InterfaceVersion + ' / ' + IntToStr(eResult); end; |
Re: C++ DLL in Delphi einbinden
Ja - spitze!
Wie erwartet klappt das reibungslos! Muss Dir echt nomma ganz großen Dank aussprechen! Ohne Dich wär ich hier wirklich verzweifelt! :thumb: Merci! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 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