2009-03-14 6 views
5

Ich habe eine kleine Bibliothek, bestehend aus einem DLL, ein Header und eine .def-Datei. Ich bin ziemlich sicher, dass die Bibliothek in C geschrieben wurde, aber möglicherweise C++.Verwenden einer DLL mit Header .h in C++

Ist es mir möglich, auf die Funktionen in der Bibliothek zuzugreifen, ohne die LoadLibrary/GetProcAddress/FreeLibrary-Methode zu verwenden, über die normalerweise gesprochen wird. Ich habe keine .lib-Datei - ist es üblich, eine zu haben?

Ich habe buchstäblich die letzten 2 Tage damit verbracht, dies zu suchen. Es scheint, dass, da ich eine Header-Datei gegeben habe, die die Funktionen definiert, die ich aus der DLL verwenden möchte, und eine .def-Datei brauche, muss ich nicht jede Funktion manuell "laden" (LoadLibrary/GetProAddress/FreeLibrary) - in In meinem Fall werde ich ungefähr 5 oder 6 Funktionen von der .dll verwenden, aber es sind ungefähr 70 verfügbar und es scheint, dass das ein Ball-Ache wäre und zu einem unnötigen Durcheinander von Code führen würde.

Vielen Dank für jeden Hinweis.

Antwort

3

Visual C++ hat „lib "- Nachschlagen in der Online-Hilfe.

Verwenden Sie "lib/def", um die .lib-Datei zu erstellen.

2

Sie benötigen eine lib-Datei - sie enthält die Stubs, die der Linker zum Erstellen der Importtabelle für Ihre DLL benötigt.

nicht sicher, ob das funktionieren würde, aber man kann versuchen:

Eine .C-Datei mit leeren Stubs und der DEF-Datei. Kompilieren Sie als DLL mit dem exakt gleichen Namen, um die .lib zu generieren. Wirf die neue DLL weg und verlinke sie mit der lib. Wenn sich die existierende DLL im selben Verzeichnis befindet wie deine exe, sollte dein Programm in der Lage sein, sie zu laden und zu binden.

Ich glaube, das wird funktionieren, weil native DLLs nicht stark benannt sind.

7

Es gibt mehrere Möglichkeiten, um eine Importbibliothek für eine DLL erstellen - für das Erstellen einer Microsoft dokumentiert ein Verfahren, indem Sie Ihre eigene DEF-Datei Aufbau: