LoadLibrary und AfxLoadLibrary
Aktualisiert: November 2007
Prozesse rufen LoadLibrary (oder AfxLoadLibrary) auf, um eine explizite Verknüpfung mit einer DLL herzustellen. Wenn der Aufruf erfolgreich ist, ordnet die Funktion die angegebene DLL im Adressbereich des aufrufenden Prozesses zu und gibt ein Handle für die DLL zurück. Dieses Handle kann zusammen mit anderen Funktionen für die explizite Verknüpfung verwendet werden, z. B. GetProcAddress und FreeLibrary.
LoadLibrary versucht, die DLL mithilfe derselben Suchfolge aufzufinden, die für die implizite Verknüpfung verwendet wird. Wenn das System die DLL nicht finden kann oder die Einstiegspunktfunktion den Wert FALSE zurückgibt, gibt LoadLibrary den Wert NULL zurück. 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 Verweiszähler des Moduls.
Wenn die DLL über eine Einstiegspunktfunktion verfügt, ruft das Betriebssystem die Funktion im Kontext des Threads auf, durch den LoadLibrary aufgerufen wurde. Die Einstiegspunktfunktion wird nicht aufgerufen, wenn die DLL bereits an den Prozess angefügt ist, da es einen früheren Aufruf von LoadLibrary ohne entsprechenden Aufruf der FreeLibrary-Funktion gegeben hat.
In MFC-Anwendungen, durch die Erweiterungs-DLLs geladen werden, sollte AfxLoadLibrary anstelle von LoadLibrary verwendet werden. Durch AfxLoadLibrary wird vor dem Aufruf von LoadLibrary eine Behandlung der Thread-Synchronisierung durchgeführt. Die Schnittstelle (Funktionsprototyp) zu AfxLoadLibrary ist identisch mit der zu LoadLibrary.
Wenn die DLL von Windows aus einem bestimmten Grund nicht geladen werden kann, versucht der Prozess, die Verarbeitung fortzusetzen. So könnte der Prozess z. B. dem Benutzer den Fehler melden und ihn veranlassen, einen anderen Pfad für die DLL anzugeben.
Sicherheitshinweis: |
---|
Wenn der Code unter Windows NT 4, Windows 2000 oder Windows XP (vor Installation von SP1) ausgeführt werden soll, vergewissern Sie sich, dass für sämtliche DLLs der vollständige Pfadname angegeben ist. Unter diesen Betriebssystemen wird beim Laden von Dateien zuerst das aktuelle Verzeichnis durchsucht. Wenn Sie den Pfad für die Datei nicht genau angeben, wird unter Umständen eine falsche Datei geladen. |