Compartir a través de


Función FreeLibrary (libloaderapi.h)

Libera el módulo de biblioteca de vínculos dinámicos (DLL) cargado y, si es necesario, disminuye su recuento de referencias. Cuando el recuento de referencias alcanza cero, el módulo se descarga desde el espacio de direcciones del proceso de llamada y el identificador ya no es válido.

Sintaxis

BOOL FreeLibrary(
  [in] HMODULE hLibModule
);

Parámetros

[in] hLibModule

Identificador del módulo de biblioteca cargado. LoadLibrary, LoadLibraryEx,
La función GetModuleHandle o GetModuleHandleEx devuelve este identificador.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información ampliada de los errores, llame a la función GetLastError.

Comentarios

El sistema mantiene un recuento de referencias por proceso para cada módulo cargado. Un módulo que se cargó en la inicialización del proceso debido a la vinculación dinámica en tiempo de carga tiene un recuento de referencias de uno. El recuento de referencias de un módulo se incrementa cada vez que se carga el módulo mediante una llamada a LoadLibrary. El recuento de referencias también se incrementa mediante una llamada a LoadLibraryEx a menos que el módulo se cargue por primera vez y se cargue como un archivo de datos o imagen.

El recuento de referencias se reduce cada vez que se llama a la función FreeLibrary o FreeLibraryAndExitThread para el módulo. Cuando el recuento de referencias de un módulo alcanza cero o finaliza el proceso, el sistema descarga el módulo desde el espacio de direcciones del proceso. Antes de descargar un módulo de biblioteca, el sistema permite que el módulo se desasocie del proceso mediante una llamada a la función DllMain del módulo, si la tiene, con el valor DLL_PROCESS_DETACH. De este modo, el módulo de biblioteca ofrece la oportunidad de limpiar los recursos asignados en nombre del proceso actual. Una vez que se devuelve la función de punto de entrada, el módulo de biblioteca se quita del espacio de direcciones del proceso actual.

No es seguro llamar a FreeLibrary desde DllMain. Para obtener más información, vea la sección Comentarios de DllMain.

Llamar a FreeLibrary no afecta a otros procesos que usan el mismo módulo.

Tenga cuidado al llamar a FreeLibrary con un identificador devuelto por GetModuleHandle. La función GetModuleHandle no incrementa el recuento de referencias de un módulo, por lo que pasar este identificador a FreeLibrary puede hacer que un módulo se descargue prematuramente.

Un subproceso que debe descargar el archivo DLL en el que se está ejecutando y, a continuación, finalizar a sí mismo debe llamar a FreeLibraryAndExitThread en lugar de llamar a FreeLibrary y ExitThread por separado. De lo contrario, se puede producir una condición de carrera. Para obtener más información, vea la sección Comentarios de FreeLibraryAndExitThread.

Ejemplos

Para obtener un ejemplo, vea Uso de Run-Time vinculación dinámica.

Requisitos

   
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado libloaderapi.h (incluye Windows.h)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

DllMain

Funciones de la biblioteca de vínculos dinámicos

FreeLibraryAndExitThread

GetModuleHandle

GetModuleHandleEx

LoadLibrary

Vinculación dinámica en tiempo de ejecución