In einer Windows-Umgebung
Als ich versuchte, eine DLL mit meinem Programm Explicitly (unter Verwendung von LoadLibrary) zu verknüpfen,
Als ich versuchte, die DLL mit meinem Programm Implizit (mit Header-Datei) zu verknüpfen
Dann benötigt es die relevante Lib
-Datei, die mit der DLL erzeugt wurde.
Meine Fragen sind
Lib
-Datei? DLL
oder Header file
? Ich bin schon durch diese Frage. Aber ich kann keinen würdigen Grund verstehen. Bitte, könnte jemand helfen, dies in einfachen Worten zu erklären. Danke.
Warum implizit eine Link-Lib-Datei benötigt.
Die .libs enthalten die Importinformationen der DLL. Sie können die Informationen mit dem Befehl dumpbin
überprüfen, der in Windows / Visual Studio SDK enthalten ist.
Dies ist die Link-Information von recv in ws2_32.lib zum Beispiel:
%Vor%Sie können überprüfen, ob es die Ordinalzahl und den Namen in ws2_32.dll gibt (prüfen Sie, ob es jetzt heißt, eine DLL zu importieren).
Welche Informationen benötigt man aus 'Lib' Datei, die nicht aus DLL oder Header-Datei
erhalten kann
In der Header-Datei gibt es keine Informationen darüber, wo die Importe extrahiert werden. Daher werden sie beim Kompilieren als Importe (__imp__name) markiert. Wenn sie mit der .lib verknüpft sind, wird der Name aufgelöst:
Wenn es Frage 2 gibt, wie diese Informationen beim expliziten Laden abgerufen werden.
Wenn Sie zum expliziten Laden die LoadLibrary meinen, sagen Sie dies zur Laufzeit und nicht zur Verbindungszeit. Der PE-Lader wird also die DLL im PATH suchen und dynamisch laden. Dann haben Sie andere Funktionen, um die Adressen der exportierten Funktionen zu erhalten.
Wenn du etwas nicht verstehst, frage mich einfach, versuche mit Dumpbin zu spielen und lese über PE, wenn du das besser verstehen willst.
Bei der impliziten Verknüpfung gibt die Funktionsdeklaration den im Programm zu verwendenden Namen sowie den Prototyp und die Aufrufkonvention an. Aber mehr Informationen werden benötigt. Speziell:
Einige Sprachdesigner haben diese Informationen mithilfe von Spracherweiterungen bereitgestellt. Zum Beispiel hat Delphi diesen Weg genommen. Implizites Verknüpfen wird vollständig in Code ohne LIB-Dateien angegeben. Auf der anderen Seite besteht die Konvention für C und C ++ darin, .lib-Dateien zu verwenden, um die fehlenden Informationen anzugeben.
Tags und Links c++ visual-c++