![]() |
Eine in C geschriebene DLL in Delphi verwenden
Hallo,
ich habe eine in C geschrieben DLL die ich Delphi nutzen will. Die DLL heist MCMDLL.dll und es liegt noch ein C-Header File als Information vor welche folgende Funktion enthalten sind. U.a. findet man dort
Code:
Die Funktion gibt es auch wircklich in der DLL, was man mit in einer DOS-Shell mit
MCM_API const char * __stdcall ML_DllVersion(void);
Code:
rausbekommt. Dabei erhält für obige Funktion den Eintrag
tdump MCMDLL.dll MCMDLL.txt
Code:
RVA Ord Hint Name
-------- --- ---- ---------------- 00004F20 173 00AC _ML_DllVersion@0 Die Funktion wollte ich dann statisch mit
Delphi-Quellcode:
einbinden, und bei Knopfdruck per
function _ML_DllVersion:PChar; external 'MCMDLL.dll';
Delphi-Quellcode:
die DLL Version anzeigen lassen. Dies führt aber immer zu dem Fehler:
procedure TForm1.Button1Click(Sender: TObject);
begin MessageDlg(ML_DllVersion, mtWarning, [mbOK], 0); end; Zitat:
Hat jemand eine Idee ???? |
Re: Eine in C geschriebene DLL in Delphi verwenden
Mal probiert das in Delphi auch als stdcall zu deklarieren?
|
Re: Eine in C geschriebene DLL in Delphi verwenden
Versuchs mal so:
Delphi-Quellcode:
Denn laut deinem DOS-Dump hat die Funktion den Index 173.. Wahrscheinlich hat der Compiler die Funktion intern umbenannt.
function _ML_DllVersion:PChar; external 'MCMDLL.dll' index 173; stdcall;
|
Re: Eine in C geschriebene DLL in Delphi verwenden
So gehts nicht:
Delphi-Quellcode:
Aber so:
function _ML_DllVersion:PChar; external 'MCMDLL.dll' index 173; stdcall;
Delphi-Quellcode:
:bounce2:
function _ML_DllVersion:PChar; stdcall; external 'MCMDLL.dll' index 173;
Vielen Dank. |
Re: Eine in C geschriebene DLL in Delphi verwenden
Delphi-Quellcode:
So gehts richtig. Den Namen so angeben wie er exportiert wird.
function ML_DllVersion: PChar; cdecl; external 'MCMDLL.dll' name '_ML_DllVersion@0';
Der _ deutet an das die Calling Convention nicht stdcall ist, sondern cdecl. |
Re: Eine in C geschriebene DLL in Delphi verwenden
Zitat:
|
Re: Eine in C geschriebene DLL in Delphi verwenden
Na dann hat mal wieder jemand bei der Erstellung der DLL nicht auf die Compileroptionen geachtet.
Das ist wirklich ein grosser Mist bei MS. |
Re: Eine in C geschriebene DLL in Delphi verwenden
Die Funktionsnamen haben rein gar nichts mit der Aufrufkonvention gemeinsam. Dass der "_" Tiefstrich ueblicherweise nicht in __stdcall Funktionen verwendet wird ist eher Zufall bzw eine interne Regelung. Genausowenig ist es bei __cdecl Funktionen Zwang einen _ im Namen zu haben. Das hat nichts mit Schlampigkeit zu tun, es gibt einfach keine Regeln fuer die Namensgebung. Die einzige Ausnahme wo man zu 99% auf __cdecl schliessen kann sind mangled C++ Funktionsnamen (So dass es moeglich ist ueberladene Funktionen zu exportieren) die aussehen wie z.B. ??0__non_rtti_object@@QAE@ABV0@@Z - allerdings ist das auch keine Garantie fuer __cdecl, aber man kann sich da aber zu 99.9% sicher sein, da die C++-Compiler solche Funktionen normalerweise grundsaetzlich als __cdecl exportieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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