"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 ausgeführt wird, ordnet sie die angegebene DLL dem Adressraum des aufrufenden Prozesses zu und gibt ein Handle für die DLL zurück. 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.