DLL mit .def Datei linken C++
Hallo leute,
hoffe hier finden sich C++ kenner, ich habe folgendes Problem, ich habe eine DLL Datei , deren Quellcode ich bekommen habe in form von .cpp und .h datein. Nun wollte ich die kompelieren und in eine Applikation einbinden und dabei wurden die exportierten funktionen der DLL nicht gefunden. Ursache: Borland Compiler hängt automatisch an alle funktionen die exportiert werden einen _ dran. Nun habe ich mich etwas eingelesen und folgende seite gefunden.
http://www.textarchiv.alojado.de/text/vc…inden-ap86.html
also habe ich nun mit in der console mit impdef eine definitionsdatei erstellt und die dann so umgeändert:
das Problem ist nun, wie kann ich nun meinem Borland linker sagen:"verwende bitte diese .def datei und ändere die exportierten dll funktionsnamen"
Ich verwende Borland Builder 6 IDE. Hoffe jemand hier kann mir helfen
MFG
hoffe hier finden sich C++ kenner, ich habe folgendes Problem, ich habe eine DLL Datei , deren Quellcode ich bekommen habe in form von .cpp und .h datein. Nun wollte ich die kompelieren und in eine Applikation einbinden und dabei wurden die exportierten funktionen der DLL nicht gefunden. Ursache: Borland Compiler hängt automatisch an alle funktionen die exportiert werden einen _ dran. Nun habe ich mich etwas eingelesen und folgende seite gefunden.
http://www.textarchiv.alojado.de/text/vc…inden-ap86.html
also habe ich nun mit in der console mit impdef eine definitionsdatei erstellt und die dann so umgeändert:
|
|
Quellcode |
1 2 3 4 5 6 |
LIBRARY testdll.DLL
EXPORTS
_function1 @1 ; function1
_function2 @2 ; function2
_function3 @3 ; function3
|
das Problem ist nun, wie kann ich nun meinem Borland linker sagen:"verwende bitte diese .def datei und ändere die exportierten dll funktionsnamen"
Ich verwende Borland Builder 6 IDE. Hoffe jemand hier kann mir helfen
MFG
Mein kleines Projekt
-Cruel Online-
-Cruel Online-
Nur um dein Problem richtig zu verstehen: Du willst eine DLL mit Borland bauen und sie anschließend in Borland verwenden?
Oder willst du eine VC++ DLL in Borland verwenden (bzw. anders rum?)
Übrigens: Warum tut man sich freiwillig Borland an? :O
Die Software wurde längst an Codegear verkauft und ist...nunja
Oder willst du eine VC++ DLL in Borland verwenden (bzw. anders rum?)
Übrigens: Warum tut man sich freiwillig Borland an? :O
Die Software wurde längst an Codegear verkauft und ist...nunja
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog
naja ich will eine DLL mit borland bauen bzw neu Compelieren, und diese DLL soll dann in einem tool verwendet werden, dieses tool arbeitet mit cdecl und nicht mit fastcall auf jedenfall habe ich versucht über cmd zu linken und dann ist mir was ganz banales aufgefallen, ich kann die .def datei einfach zum projekt hinzufügen und es wird mitgelinkt-.- sowas dummes.. da sucht man ganzen tag nach syntax und wie man eine response datei erzeugt usw und später sieht man, dass man eine .def datei einfach einbinden kann... thema hat sich erledigt
und naja Borland verwende ich , weil ich es muss(würde lieber mit Visual Studio arbeiten aber naja)
MFG

und naja Borland verwende ich , weil ich es muss(würde lieber mit Visual Studio arbeiten aber naja)
MFG
Mein kleines Projekt
-Cruel Online-
-Cruel Online-
Wenn das tool mit __cdecl arbeitet und du __fastcall exportierst bringt es nix nur den namen zu ändern.
Bei __cdecl ist der caller für das stack cleanup zuständig, bei __fastcall ist es der callee - das geht schief wenn du das mischt.
Afaik werden aber dll exports __stdcall exportiert.
Bei __cdecl ist der caller für das stack cleanup zuständig, bei __fastcall ist es der callee - das geht schief wenn du das mischt.
Afaik werden aber dll exports __stdcall exportiert.
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog
naja das ganze vereinfacht:
ich habe viele .cpp und viele .h datein. Wenn ich die dinger mit Visual Studio C++ kompeliere, kriege ich eine dll raus, die mit dem tool geöffnet werden kann. Mache ich das gleiche mit Borland, sagt das tool function1 wurde in der DLL nicht gefunden. tdump zeigt mir die funktionsnamen die exportiert wurden und bei alle funktionen in der borland dll haben einen _ davor, nun habe ich aus dem quellcode den dllexport entfernt und dem borland kompiler gesagt(mit der def datei) er soll bitte alle funktionen ohne _ exportieren. habe dann mit tdump die borland dll anzeigen lassen und siehe da, keine _ vor funktionsnamen. die dll im tool geladen und lauft alles. also es hat schon was gebacht
vllt habe ich nur davor falsch erklärt.
ich habe viele .cpp und viele .h datein. Wenn ich die dinger mit Visual Studio C++ kompeliere, kriege ich eine dll raus, die mit dem tool geöffnet werden kann. Mache ich das gleiche mit Borland, sagt das tool function1 wurde in der DLL nicht gefunden. tdump zeigt mir die funktionsnamen die exportiert wurden und bei alle funktionen in der borland dll haben einen _ davor, nun habe ich aus dem quellcode den dllexport entfernt und dem borland kompiler gesagt(mit der def datei) er soll bitte alle funktionen ohne _ exportieren. habe dann mit tdump die borland dll anzeigen lassen und siehe da, keine _ vor funktionsnamen. die dll im tool geladen und lauft alles. also es hat schon was gebacht
vllt habe ich nur davor falsch erklärt.
Mein kleines Projekt
-Cruel Online-
-Cruel Online-
Ah ok, das erklärt das ganze.
__declspec(dllexport) ersetzt .def files, sprich wenn du damit die Funktionen exportierst brauchst du keine .def Datei.
Nur gibt es diesen Mechanismus bei Borland nicht, deshalb auch die def file.
Zwar kann man theoretisch Funktionen beliebigen calling conventions exportieren, jedoch sollte man nur __stdcall verwenden - z.B. weil alle WinAPI exports so funktionieren und andere Programme oft __stdcall implizit annehmen :O
Sollte deine Funktion keine Parameter haben würde übrigens auch __fastcall funktionieren, da der einzige Unterschied zu __stdcall die Art der Parameterübergabe ist :O
__declspec(dllexport) ersetzt .def files, sprich wenn du damit die Funktionen exportierst brauchst du keine .def Datei.
Nur gibt es diesen Mechanismus bei Borland nicht, deshalb auch die def file.
Zwar kann man theoretisch Funktionen beliebigen calling conventions exportieren, jedoch sollte man nur __stdcall verwenden - z.B. weil alle WinAPI exports so funktionieren und andere Programme oft __stdcall implizit annehmen :O
Sollte deine Funktion keine Parameter haben würde übrigens auch __fastcall funktionieren, da der einzige Unterschied zu __stdcall die Art der Parameterübergabe ist :O
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog
naja für dich erkärt das alles
ich brauchte eine woche um herauszufinden was ich mit borland mache, habe mich tagelang durch die settings durchgeklickt und immer wieder kompeliert.. was mir noch aufgefallen ist, dass vistual studio beim kompelieren nicht gemekert hat als funktionen wie sprintf_s aufgerufen wurde oder
if(variable = 0) Borland meckerte bei sowas sofort...
ich brauchte eine woche um herauszufinden was ich mit borland mache, habe mich tagelang durch die settings durchgeklickt und immer wieder kompeliert.. was mir noch aufgefallen ist, dass vistual studio beim kompelieren nicht gemekert hat als funktionen wie sprintf_s aufgerufen wurde oderif(variable = 0) Borland meckerte bei sowas sofort...
Mein kleines Projekt
-Cruel Online-
-Cruel Online-

Nachtrag zu meinem Post: es kann sein das Borland mitlerweile __declspec( dllexport ) kennt, BCB hatte ich vor Ewigkeiten verwendet, deshalb sind die Aussagen mit Vorsicht zu genießen :O
Zitat
if(variable = 0) Borland meckerte bei sowas sofort...
Ja, das ist ein leidiges Thema - VS sollte bei entsprechendem Warnlevel eine Warnung werfen, bei "treat warning as errors" ebenfalls einen Fehler.
Meiner Erfahrung nach ist if (variable = x) öfters ein Versehen als beabsichtigt, in meiner Firma atm sogar in den Coding guidelines verboten (auf die jedoch, wie üblich kein Programmierer hört
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog
Ähnliche Themen
-
Grafiken »-
Header bearbeiten
(6. März 2010, 20:26)
-
Archiv: Software »-
Pinnacle Studio 9
(13. September 2005, 19:29)
-
(X)HTML & CSS & DHTML & Javascript »-
PopUp Problemchen <---
(31. Juli 2003, 18:44)
-
Feedback-Forum »-
Symbiotic
(24. Juni 2003, 13:30)
-
PHP »-
mySQL Error?
(17. Mai 2003, 15:11)


