FreeLibrary-Funktion (libloaderapi.h)

Gibt das geladene DLL-Modul (Dynamic Link Library) frei und erhöht bei Bedarf die Verweisanzahl. Wenn die Verweisanzahl 0 erreicht, wird das Modul aus dem Adressraum des aufrufenden Prozesses entladen, und das Handle ist nicht mehr gültig.

Syntax

BOOL FreeLibrary(
  [in] HMODULE hLibModule
);

Parameter

[in] hLibModule

Ein Handle für das geladene Bibliotheksmodul. LoadLibrary, LoadLibraryEx,
GetModuleHandle oder GetModuleHandleEx-Funktion gibt dieses Handle zurück.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie die GetLastError-Funktion auf.

Hinweise

Das System verwaltet eine Referenzanzahl pro Prozess für jedes geladene Modul. Ein Modul, das bei der Prozessinitialisierung aufgrund der dynamischen Verknüpfung während der Ladezeit geladen wurde, weist die Referenzanzahl 1 auf. Die Referenzanzahl für ein Modul wird jedes Mal erhöht, wenn das Modul durch einen Aufruf von LoadLibrary geladen wird. Die Verweisanzahl wird auch durch einen Aufruf von LoadLibraryEx erhöht, es sei denn, das Modul wird zum ersten Mal geladen und als Daten- oder Imagedatei geladen.

Die Referenzanzahl wird jedes Mal dekrementiert, wenn die FreeLibrary - oder FreeLibraryAndExitThread-Funktion für das Modul aufgerufen wird. Wenn die Referenzanzahl eines Moduls 0 erreicht oder der Prozess beendet wird, entlädt das System das Modul aus dem Adressraum des Prozesses. Vor dem Entladen eines Bibliotheksmoduls ermöglicht das System dem Modul, sich vom Prozess zu trennen, indem die DllMain-Funktion des Moduls aufgerufen wird, sofern es über eine verfügt, mit dem DLL_PROCESS_DETACH Wert. Dadurch erhält das Bibliotheksmodul die Möglichkeit, Ressourcen zu sauber, die im Auftrag des aktuellen Prozesses zugeordnet wurden. Nachdem die Einstiegspunktfunktion zurückgegeben wurde, wird das Bibliotheksmodul aus dem Adressraum des aktuellen Prozesses entfernt.

Es ist nicht sicher, FreeLibrary von DllMain aus aufzurufen. Weitere Informationen finden Sie im Abschnitt Hinweise in DllMain.

Das Aufrufen von FreeLibrary wirkt sich nicht auf andere Prozesse aus, die dasselbe Modul verwenden.

Gehen Sie beim Aufrufen von FreeLibrary mit einem von GetModuleHandle zurückgegebenen Handle vorsichtig vor. Die GetModuleHandle-Funktion erhöht die Referenzanzahl eines Moduls nicht, sodass das Übergeben dieses Handles an FreeLibrary dazu führen kann, dass ein Modul vorzeitig entladen wird.

Ein Thread, der die DLL, in der sie ausgeführt wird, entladen und dann selbst beenden muss, sollte FreeLibraryAndExitThread aufrufen, anstatt FreeLibrary und ExitThread separat aufzurufen. Andernfalls kann eine Racebedingung auftreten. Ausführliche Informationen finden Sie im Abschnitt Hinweise von FreeLibraryAndExitThread.

Beispiele

Ein Beispiel finden Sie unter Verwenden Run-Time dynamischen Verknüpfung.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile libloaderapi.h (einschließlich Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

DllMain

Dynamic-Link-Bibliotheksfunktionen

FreeLibraryAndExitThread

GetModuleHandle

GetModuleHandleEx

LoadLibrary

Dynamische Laufzeitverknüpfung