Wenn Sie ein DLL-Projekt kompilieren, erhalten Sie eine DLL und eine LIB-Datei als Ausgabe. Die DLL enthält den eigentlichen Bibliothekscode. Die LIB-Datei enthält Stubs für die exportierten Funktionen, die den Linker beim Senden von Code zum Aufrufen dieser DLL unterstützen.
Dies unterscheidet sich sehr von der LIB-Datei, die Sie beim Kompilieren einer statischen Bibliothek erhalten. Die LIB-Datei enthält den gesamten Objektcode, der die Bibliothek enthält. All dieser Code wird beim Erstellen direkt mit Ihrer ausführbaren Datei verknüpft - daher der "statische" Teil des Namens.
Die tatsächliche Art der Nutzung ist jedoch sehr ähnlich. Unabhängig davon, ob Sie eine Verknüpfung zu einer dynamischen oder statischen Bibliothek herstellen, verweisen Sie den Linker (über "Zusätzliche Abhängigkeiten") auf die LIB-Datei. Der Linker erledigt den Rest; Es kann aus der LIB-Datei erkennen, was es tun soll.
Natürlich müssen Sie sicherstellen, dass es die richtige LIB-Datei ist. Wenn Sie beide Projekte (die DLL und die EXE) in derselben Lösung verwenden, können Sie Projektreferenzen verwenden, was die Aufgabe im Wesentlichen narrensicher macht.
EDIT: Sie erhalten natürlich keine LIB-Datei, wenn Sie eine DLL erstellen, es sei denn, die DLL exportiert Funktionen. (Wenn es keine Funktionen exportiert, gibt es nichts, was ein Client dieser DLL aufrufen kann. Es gibt also keinen Grund für eine LIB-Datei!) Die einfachste Möglichkeit, Funktionen zum Exportieren aus einer DLL anzuordnen, ist die __declspec(dllexport)
Annotation . Wenn Sie mit einem Makro kombiniert werden, können Sie dafür sorgen, dass es auf der Verbraucherseite in __declspec(dllimport)
aufgelöst wird, sodass Sie die gleiche Header-Datei sowohl zum Erstellen der DLL als auch zum Verwenden von einer Anwendung verwenden können. Mehr Informationen dazu in meiner Antwort here. Alternativ können Sie a DEF file with an "EXPORTS" section verwenden.
Ein DLL-Projekt generiert eine * import * -Bibliothek. Es ist nicht dasselbe wie eine statische Bibliothek, es ist sehr klein und deklariert nur die Funktionen, die Sie exportiert haben. Wenn Sie keine .lib-Datei erhalten, haben Sie sie nicht korrekt erstellt oder Sie haben vergessen, Funktionen zu exportieren. –
DLL-Projekt erstellt nur die DLL-Datei. Ich kann keine .lib-Dateien finden – Stark