Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

cccpmik

Foren Gott

Dabei seit: 04.09.2007

Beiträge: 2 999

 

1 Zum Seitenanfang

Freitag, 23. Juli 2010, 14:01

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:

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-
 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

2 Zum Seitenanfang

Freitag, 23. Juli 2010, 15:02

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 :evil:
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
 

cccpmik

Foren Gott

Dabei seit: 04.09.2007

Beiträge: 2 999

 

3 Zum Seitenanfang

Freitag, 23. Juli 2010, 15:19

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:D

und naja Borland verwende ich , weil ich es muss(würde lieber mit Visual Studio arbeiten aber naja)

MFG
Mein kleines Projekt
-Cruel Online-
 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

4 Zum Seitenanfang

Freitag, 23. Juli 2010, 15:36

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.
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
 

cccpmik

Foren Gott

Dabei seit: 04.09.2007

Beiträge: 2 999

 

5 Zum Seitenanfang

Freitag, 23. Juli 2010, 15:48

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.
Mein kleines Projekt
-Cruel Online-
 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

6 Zum Seitenanfang

Freitag, 23. Juli 2010, 16:15

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
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
 

cccpmik

Foren Gott

Dabei seit: 04.09.2007

Beiträge: 2 999

 

7 Zum Seitenanfang

Freitag, 23. Juli 2010, 18:53

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...
Mein kleines Projekt
-Cruel Online-
 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

8 Zum Seitenanfang

Freitag, 23. Juli 2010, 19:46

:)

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 :thumbdown: )
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
 

Ähnliche Themen