Fonction FreeLibrary (libloaderapi.h)
Libère le module de bibliothèque de liens dynamiques (DLL) chargé et, si nécessaire, décrémente son nombre de références. Lorsque le nombre de références atteint zéro, le module est déchargé de l’espace d’adressage du processus appelant et le handle n’est plus valide.
Syntaxe
BOOL FreeLibrary(
[in] HMODULE hLibModule
);
Paramètres
[in] hLibModule
Handle du module de bibliothèque chargé. LoadLibrary, LoadLibraryEx,
La fonction GetModuleHandle ou GetModuleHandleEx retourne ce handle.
Valeur retournée
Si la fonction réussit, la valeur de retour est différente de zéro.
Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez la fonction GetLastError.
Notes
Le système gère un nombre de références par processus pour chaque module chargé. Un module qui a été chargé lors de l’initialisation du processus en raison d’une liaison dynamique au moment du chargement a un nombre de références d’un. Le nombre de références d’un module est incrémenté chaque fois que le module est chargé par un appel à LoadLibrary. Le nombre de références est également incrémenté par un appel à LoadLibraryEx , sauf si le module est chargé pour la première fois et qu’il est chargé en tant que fichier de données ou d’image.
Le nombre de références est décrémenté chaque fois que la fonction FreeLibrary ou FreeLibraryAndExitThread est appelée pour le module. Lorsque le nombre de références d’un module atteint zéro ou que le processus se termine, le système décharge le module de l’espace d’adressage du processus. Avant de décharger un module de bibliothèque, le système permet au module de se détacher du processus en appelant la fonction DllMain du module, le cas échéant, avec la valeur DLL_PROCESS_DETACH. Cela permet au module de bibliothèque de propre des ressources allouées pour le compte du processus actuel. Une fois la fonction de point d’entrée retournée, le module de bibliothèque est supprimé de l’espace d’adressage du processus actuel.
Il n’est pas sûr d’appeler FreeLibrary à partir de DllMain. Pour plus d’informations, consultez la section Remarques dans DllMain.
L’appel de FreeLibrary n’affecte pas les autres processus qui utilisent le même module.
Soyez prudent lorsque vous appelez FreeLibrary avec un handle retourné par GetModuleHandle. La fonction GetModuleHandle n’incrémente pas le nombre de références d’un module. Le fait de passer ce handle à FreeLibrary peut entraîner le déchargement prématuré d’un module.
Un thread qui doit décharger la DLL dans laquelle il s’exécute, puis s’arrêter lui-même doit appeler FreeLibraryAndExitThread au lieu d’appeler FreeLibrary et ExitThread séparément. Sinon, une condition de race peut se produire. Pour plus d’informations, consultez la section Remarques de FreeLibraryAndExitThread.
Exemples
Pour obtenir un exemple, consultez Utilisation de Run-Time liaison dynamique.
Spécifications
Client minimal pris en charge | Windows XP [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | libloaderapi.h (inclure Windows.h) |
Bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |