MSDN sagt, dass ich Funktion mit __declspec(dllexport)
aus der Bibliothek exportieren kann, aber wie kann ich diese Bibliothek in meine ausführbare Datei laden?
Ich habe eine exportierte Funktion in der DLL:
%Vor%Und jetzt möchte ich es in meiner ausführbaren Datei verwenden:
%Vor%Aber wie wird mein Programm wissen, wo diese Funktion zu finden ist?
Dies ist der Compiler / Linker-Job, er wird automatisch ausgeführt, solange Sie
Die .lib-Datei wird beim Kompilieren der DLL generiert oder mit ihr geliefert, wenn es sich nicht um Ihren Code handelt. In diesem Fall wird der Code mit __declspec(dllexport)
kompiliert.
Beim Kompilieren Ihrer Exe sieht der Compiler, dass die enthaltene Funktion in DLL zu finden ist. In diesem Fall wird der Code mit __declspec(dllimpport)
kompiliert.
Der Linker wird mit der .lib-Datei bereitgestellt und generiert entsprechende Anweisungen in der exe.
Diese Anweisungen veranlassen die Exe, die DLL zu finden und die exportierte Funktion zur Laufzeit zu laden. Die DLL muss nur neben der Exe liegen (es gibt jedoch andere mögliche Orte).
Der Wechsel zwischen __declspec(dllimpport)
und __declspec(dllexport)
erfolgt über ein Makro, , das von Visual C ++ beim Erstellen eines DLL-Projekts bereitgestellt wird .
Wenn Sie eine DLL verwenden, können Sie die Kombination LoadLibrary
und GetProcAddress
verwenden.
Ihr Betriebssystem kann es basierend auf dem Verknüpfungsprozess finden. Wenn Ihre Bibliothek ordnungsgemäß mit Ihrem Programm verknüpft ist, erkennt sie, dass eine externe Funktion verwendet wird, und suchen Sie in den DLL-Pfaden danach. Wenn es nicht gefunden werden kann, wird Ihr Linker einen Fehler auslösen.
Ich empfehle, den Verknüpfungsprozess etwas zu lesen; Es kann manchmal verwirrend sein, aber es zu verstehen, kann Ihnen helfen, einige Schlüsselkonzepte in C / C ++ zu verstehen.