![]() |
Delphi DLL und deren Import in C/C++
Hi DP'ler,
ich versuche eine von mir in Delphi erstellte DLL in ein C/C++ Projekt im Visual Studio einzubinden. Da ich sowas bisher noch nie zuvor gemacht hab, hab ich auch dementsprechend keine Ahnung. Ich hab mich daher ein wenig Informiert, und die einzige Möglichkeit eine DLL statisch einzubinden ist scheinbar eine .lib-Datei. Ich habe auch noch gelesen, dass man sich so ne lib-Datei mit dem Tool "implib" erstellen kann. Wenn ich die damit erstellte lib-Datei dann aber in Visual Studio einbinde (per #pragma comment(lib, "lib.lib") ), dann krieg ich immer noch den Fehler, dass ich einen Verweis auf ein nichtaufgelöstes Symbol in meinem Code habe. Kennt jemand das Problem? Oder gibt es auch noch andere Möglichkeiten eine DLL statisch einzubinden oder eine lib-Datei zu erstellen? danke, Philipp |
Re: Delphi DLL und deren Import in C/C++
|
Re: Delphi DLL und deren Import in C/C++
Zitat:
|
Re: Delphi DLL und deren Import in C/C++
Wenn du auf Delphispezialitäten wie Strings u.ä. im Interface verzichtest, kannst du die Dlls wie jede andere in C-Programme einbinden.
|
Re: Delphi DLL und deren Import in C/C++
Zitat:
(Hast du dir eigentlich meinen ersten Post überhaupt durchgelesen?) |
Re: Delphi DLL und deren Import in C/C++
Nein in kann nämlich gar nicht Lesen
man könnte auch die Hilfer zum C-Kompiler Lesen und würde dann auf IMPLIB stossen |
Re: Delphi DLL und deren Import in C/C++
Zitat:
Ich wollte dir nur sagen, dass die Seite hinter dem Link den du gepostet hast mein Problem noch nichtmal anschneidet, genauso wie deine zweite Antwort. Zitat:
Und das lässt mich eben zu dem Schluss kommen, dass du meinen Post gar nicht erst durchgelesen hast. Ich will dich damit in keiner weise beschuldigen, aber ich denke, dass dies eben nahe liegt. |
Re: Delphi DLL und deren Import in C/C++
libs werden per Linker eingebunden.
|
Re: Delphi DLL und deren Import in C/C++
HI Philipp
zum Beispiel so: in den Header schreibst du unter der privaten Deklaration HINSTANCE DllInstance; in deine Unit schreibst du es so: if (!DllInstance)DllInstance = LoadLibrary("Test.dll"); // DLL Laden if (DllInstance) Form1->Caption =" DLL wurde geladen "; else Form1->Caption = " DLL wurde nicht geladen "; somit hast du die Delphi DLL geladen und kannst somit diese nutzen um auf die Funktionen zuzugreifen schreibst du folgendes: typedef PChar(_stdcall *IMPFUNC) (); IMPFUNC DllFunktion; if (DllInstance) { DllFunktion = (IMPFUNC)GetProcAddress(DllInstance,"Der Name der Funktion hier eintragen"); if (DllFunktion) { Memo1->Lines->Add(DllFunktion()); } else Memo1->Lines->Add("Funktionsname existiert nicht"); } else { Memo1->Lines->Add("Bitte Dll laden"); } somit kannst du unter C++ eine Delphi dll einbinden ich habe die Delphi DLL in den BCB mit eingebunden und es funzt sehr gut Daniel |
Re: Delphi DLL und deren Import in C/C++
Zitat:
Ich denke, dass das Problem an meiner Lib-Datei liegt, die ich mir mit dem Borland implib-tool erstellt habe. @D.Schmidt: Du bindest in deinem Beispiel die DLL dynamisch zur Laufzeit ein, ich würde dies aber der Einfachheit halber gerne statisch machen (wobei ich an der "Einfachheit" dieser Methode langsam zu zweifeln anfange). |
Re: Delphi DLL und deren Import in C/C++
Für die Einbindung in Visual C solltest du das IMPLIB de VS nehmen.
|
Re: Delphi DLL und deren Import in C/C++
Zitat:
|
Re: Delphi DLL und deren Import in C/C++
Wie sieht das Interface der Dll aus? Hat diese weitere Abhängigkeiten?
|
Re: Delphi DLL und deren Import in C/C++
Zitat:
|
Re: Delphi DLL und deren Import in C/C++
Verwendest du Delphi-spezifische Typen?
|
Re: Delphi DLL und deren Import in C/C++
Zitat:
Gibts denn noch andere Methoden eine lib datei zu erstellen? |
Re: Delphi DLL und deren Import in C/C++
Zitat:
Funktioniert den die dynamische Methode? |
Re: Delphi DLL und deren Import in C/C++
Zitat:
Zitat:
|
Re: Delphi DLL und deren Import in C/C++
Zitat:
|
Re: Delphi DLL und deren Import in C/C++
Zitat:
Ich habe mir jetzt jedenfalls eine lib-Datei mit dem im vc enthaltenen "lib" Tool über eine .def Datei erstellt, die kann ich auch ins vs einbinden, ohne Fehler, aber dann findet das teil meine Funktion trotzdem nicht: "error LNK2019: Verweis auf nicht aufgelöstes externes Symbol" |
Re: Delphi DLL und deren Import in C/C++
Welche Typen hast du den in den Funktionen?
|
Re: Delphi DLL und deren Import in C/C++
Zitat:
|
Re: Delphi DLL und deren Import in C/C++
Frisch getestet:
DLL my.dll erstellt mit Borland Studio 2006 (Delphi für Win32 Dll Projekt) my.lib importiert mit MS Visual Studio 2005 (C++ für Win32 Projekt) my.def erstellen mit BORLAND:
Code:
my.lib erstellen mit MSVC:
IMPDEF my.def my.dll
Code:
Textdatei def.tmp als Vorlage für .def Datei mit MSVC erstellen (falls IMPDEF Probleme macht.):
LIB /MACHINE:x86 /DEF:my.def
Code:
DUMPBIN /EXPORTS /OUT:def.tmp my.dll
Oder DEF Datei per Hand:
Code:
Im Header:
LIBRARY MY.DLL
DESCRIPTION 'MY Dll' EXPORTS myFunction ; comment
Code:
#define DLLPACK __declspec(dllimport)
extern "C" { DLLPACK float myFunction(void); } my.lib in Projekt einbinden und fertig. p.s. Kann - außer etwas Tipparbeit - keinen Nachteil des Ladens zur Laufzeit sehen. Im Gegenteil: So kann sich ein Programm definiert verhalten selbst wenn die DLL fehlt. Verzicht auf die DLL durch statisches linken ist mit einer Importbibliothek ja eh nicht drin. |
Re: Delphi DLL und deren Import in C/C++
Ach und für die Header Datei siehe natürlich
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 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