AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Eine in C geschriebene DLL in Delphi verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

Eine in C geschriebene DLL in Delphi verwenden

Ein Thema von schlock · begonnen am 31. Okt 2004 · letzter Beitrag vom 31. Okt 2004
Antwort Antwort
schlock

Registriert seit: 3. Sep 2004
20 Beiträge
 
#1

Eine in C geschriebene DLL in Delphi verwenden

  Alt 31. Okt 2004, 18:11
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:
MCM_API const char *  __stdcall ML_DllVersion(void);
Die Funktion gibt es auch wircklich in der DLL, was man mit in einer DOS-Shell mit
Code:
tdump MCMDLL.dll MCMDLL.txt
rausbekommt. Dabei erhält für obige Funktion den Eintrag
Code:
 RVA      Ord Hint Name
 --------  --- ---- ----------------
 00004F20  173 00AC _ML_DllVersion@0

Die Funktion wollte ich dann statisch mit
function _ML_DllVersion:PChar; external 'MCMDLL.dll'; einbinden, und bei Knopfdruck per
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MessageDlg(ML_DllVersion, mtWarning, [mbOK], 0);
end;
die DLL Version anzeigen lassen. Dies führt aber immer zu dem Fehler:
Zitat:
Der Prozedureinstiegspunkt ML_DllVersion wurde in der DLL MCMDLL.dll nicht gefunden.
Ich hab das gleiche auch mit dem Funktionsnamen _ML_DllVersion probiert. Es kam exakt der gleiche Fehler.

Hat jemand eine Idee ????
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#2

Re: Eine in C geschriebene DLL in Delphi verwenden

  Alt 31. Okt 2004, 18:14
Mal probiert das in Delphi auch als stdcall zu deklarieren?
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#3

Re: Eine in C geschriebene DLL in Delphi verwenden

  Alt 31. Okt 2004, 18:14
Versuchs mal so:function _ML_DllVersion:PChar; external 'MCMDLL.dllindex 173; stdcall; Denn laut deinem DOS-Dump hat die Funktion den Index 173.. Wahrscheinlich hat der Compiler die Funktion intern umbenannt.
  Mit Zitat antworten Zitat
schlock

Registriert seit: 3. Sep 2004
20 Beiträge
 
#4

Re: Eine in C geschriebene DLL in Delphi verwenden

  Alt 31. Okt 2004, 18:26
So gehts nicht:
function _ML_DllVersion:PChar; external 'MCMDLL.dllindex 173; stdcall; Aber so:
function _ML_DllVersion:PChar; stdcall; external 'MCMDLL.dllindex 173;


Vielen Dank.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: Eine in C geschriebene DLL in Delphi verwenden

  Alt 31. Okt 2004, 20:32
function ML_DllVersion: PChar; cdecl; external 'MCMDLL.dllname '_ML_DllVersion@0'; So gehts richtig. Den Namen so angeben wie er exportiert wird.
Der _ deutet an das die Calling Convention nicht stdcall ist, sondern cdecl.
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#6

Re: Eine in C geschriebene DLL in Delphi verwenden

  Alt 31. Okt 2004, 20:36
Zitat von Robert Marquardt:
Der _ deutet an das die Calling Convention nicht stdcall ist, sondern cdecl.
Ist es allerdings nicht zwangslaeufig grundsaetzlich so, in diesem fall wurde die funktion explizit als __stdcall deklariert
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: Eine in C geschriebene DLL in Delphi verwenden

  Alt 31. Okt 2004, 20:44
Na dann hat mal wieder jemand bei der Erstellung der DLL nicht auf die Compileroptionen geachtet.
Das ist wirklich ein grosser Mist bei MS.
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#8

Re: Eine in C geschriebene DLL in Delphi verwenden

  Alt 31. Okt 2004, 21:32
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz