DLL mitkompilieren
-
Hallo zusammen,
bin ein Neuling, also verzeiht, wenn dem ein oder anderem Experten die Frage blöd vorkommt.
Ich habe eine fertige DLL die ich gerne in meinem aktuellen Projekt benutzen möchte. Eine entsprechende LIB Datei liegt ebenfalls vor.Ich hab viel gegoogelt und bisher gelesen, dass man DLLs immer mitliefern müsste zu einer fertigen exe Anwendung (eigtl baue ich eine XLL, weiß nicht ob das einen Unterschied macht). Mein Ziel wäre es, aber nur eine Datei "auszuliefern".
Ist es möglich die DLL in meinem Projekt direkt einzubinden? Also z.B. ganz naiv die DLL in meinem Projekt hinzufügen und dann irgendwie zu verlinken?
Danke und viele Grüße
Tönnies
-
Nein! *
Wenn dieses Zusatzprodukt auch statisches Linken ermöglicht, dann benutze dieses. Dann hast Du nur eine EXE. Wenn dieses "Zusatzprodukt" nur als DLL verfügbar, dann musst Du damit leben.
Zusatz für alle Peniblen:
* Nicht ohne extremen (in meinen Augen unsinnigen) Aufwand.
-
Hallo Martin,
danke für die schnelle Antwort! Ich weiß leider nicht genau, was du mit "statisches Linken ermöglichen" meinst. Meinst du, ob ich die lib Datei benutzen kann? Das geht leider nicht, weil dann eine Fehlermeldung kommt, dass die DLL nicht gefunden wurde (falls in einem anderen Verzeichnis ausgeführt).Hierzu noch zwei Fragen:
1. Mir liegt der Quellcode der DLL vor. Kann ich das ganze ohne weiteres unter Projekteigenschaften->Konfigurationseigenschaften->Allgemein->Konfigurationstyp auf eine Statische Bibliothek umstellen und neu erstellen?2. Falls 1. so funktioniert erhalte ich ja dann eine *.lib. Kann ich diese einfach in mein exe-Projekt bei den Resourcendateien einfügen? Und wie rufe ich dann Funktionen aus der lib auf? Muss ich dafür die lib "include" oder "import" aufrufen. Etwa reicht eine Referenz in der Art
extern "C" __declspec(dllimport)void MeineLibFunktion(double L, double H);
-
lib ist hier zweideutig.
der ersteller der dll kann entweder eine dll bauen, die du mitausliefern musst. oder eine etwa gleichgroße lib bauen, die du dazulinken kannst.
aaber, wenn er eine nur eine dll baut, baut er höflicherweise dazu eine mini-lib, die du dazulinken kannst und die die dll aufruft, sodaß du dich nicht damit herumplagen musstz, aus der dll die funktionsadressen zu holen und so.
-
Tönnies schrieb:
Hierzu noch zwei Fragen:
1. Mir liegt der Quellcode der DLL vor. Kann ich das ganze ohne weiteres unter Projekteigenschaften->Konfigurationseigenschaften->Allgemein->Konfigurationstyp auf eine Statische Bibliothek umstellen und neu erstellen?"ohne weiteres" vermutlich nicht.
Das geht eigentlich nur, wenn der Hersteller der DLL vorgesehen hat dass man auch eine statische .lib bauen kann.Normalerweise muss man aber noch weitere Änderungen machen, wie z.B. die ganzen
__declspec(dllexport)
entfernen (meist wird das über ein Makro gemacht, in dem Fall reicht es an einer Stelle das Makro zu ändern).Dann... sobald du eine echte statische .lib baust muss zwingend der selbe Compiler verwendet werden. Das kann Probleme geben, wenn der DLL Code für eine andere Compiler-Version geschrieben wurde als du verwendest.
Und dann gibt es einige DLL-spezifische Dinge wie z.B. die
DllMain
Funktion. Wenn diese implementiert wurde, dann muss man sich ansehen was darin gemacht wird, und den Code an eine passende andere Stelle verschieben.Bzw. wenn Frameworks ala MFC verwendet werden kann es sein dass weitere Änderungen nötig sind.
usw.
Der Aufwand kann hier also "fast nix" bis "ziemlich viel" sein.
-
Danke volkard und husbaer für eure Antworten. Hmm ok, dann werde ich wohl die dll immer mitliefern, statt mit meinem Anfängerwissen zu versuchen die in eine statische Library umzuwandeln.
Hab mich über eure guten Ratschläge gefreut!!