"LoadLibrary" und "AfxLoadLibrary"

Prozesse rufen LoadLibrary oder LoadLibraryEx auf, um explizit eine Verknüpfung mit einer DLL herzustellen. (MFC-Apps verwenden AfxLoadLibrary oder AfxLoadLibraryEx.) Wenn die Funktion erfolgreich ist, wird die angegebene DLL dem Adressraum des aufrufenden Prozesses zugeordnet und ein Handle an die DLL zurückgegeben. Das Handle ist in anderen Funktionen erforderlich, die für die explizite Verknüpfung verwendet werden – z. B. GetProcAddress und FreeLibrary. Weitere Informationen finden Sie unter Explizite Verknüpfung.

LoadLibrary versucht, die DLL mithilfe derselben Suchfolge aufzufinden, die für die implizite Verknüpfung verwendet wird. LoadLibraryEx bietet Ihnen eine bessere Kontrolle über die Reihenfolge der Suchpfade. Weitere Informationen finden Sie unter Dynamic Link Library-Suchreihenfolge. Wenn das System die DLL nicht finden kann oder die Einstiegspunktfunktion FALSE zurückgibt, wird von LoadLibrary NULL zurückgegeben. Wenn im Aufruf von LoadLibrary ein DLL-Modul angegeben ist, das bereits im Adressraum des aufrufenden Prozesses zugeordnet ist, gibt die Funktion einfach ein Handle für die DLL zurück und erhöht den Referenzzähler des Moduls.

Wenn die DLL über eine Einstiegspunktfunktion verfügt, ruft das Betriebssystem die Funktion im Kontext des Threads auf, durch den LoadLibrary oder LoadLibraryEx aufgerufen wurde. Die Einstiegspunktfunktion wird nicht aufgerufen, wenn die DLL bereits an den Prozess angefügt ist. Dies ist der Fall, wenn ein vorheriger LoadLibrary- oder LoadLibraryEx-Aufruf für die DLL keinen entsprechenden Aufruf der FreeLibrary-Funktion enthielt.

Für MFC-Anwendungen, die MFC-Erweiterungs-DLLs laden, wird empfohlen, AfxLoadLibrary bzw. AfxLoadLibraryEx anstelle von LoadLibrary bzw. LoadLibraryEx zu verwenden. Die MFC-Funktionen behandeln die Threadsynchronisierung vor dem expliziten Laden der DLL. Die Schnittstellen (Funktionsprototypen) zu AfxLoadLibrary und AfxLoadLibraryEx sind identisch mit LoadLibrary und LoadLibraryEx.

Wenn die DLL nicht von Windows geladen werden kann, versucht der Prozess, nach dem Fehler eine Wiederherstellung durchzuführen. Beispielsweise könnte er den Benutzer über den Fehler informieren und dann nach einem anderen Pfad zur DLL fragen.

Wichtig

Stellen Sie sicher, dass Sie den vollständigen Pfad aller DLLs angeben. Das aktuelle Verzeichnis wird möglicherweise zuerst durchsucht, wenn Dateien von LoadLibrary geladen werden. Wenn Sie den Pfad für die Datei nicht vollständig qualifizieren, wird unter Umständen eine falsche Datei geladen. Wenn Sie eine DLL erstellen, verwenden Sie die Linkeroption /DEPENDENTLOADFLAG, um eine Suchreihenfolge für statisch verknüpfte DLL-Abhängigkeiten anzugeben. Verwenden Sie in Ihren DLLs sowohl vollständige Pfade für das explizite Laden von Abhängigkeiten als auch LoadLibraryEx- oder AfxLoadLibraryEx-Aufrufparameter, um die Suchreihenfolge der Module anzugeben. Weitere Informationen finden Sie unter Dynamic Link Library-Sicherheit und Dynamic Link Library-Suchreihenfolge.

Wie möchten Sie vorgehen?

Worüber möchten Sie mehr erfahren?

Siehe auch