Funzione FreeLibrary (libloaderapi.h)

Libera il modulo dll (Dynamic Link Library) caricato e, se necessario, decrementa il numero di riferimenti. Quando il conteggio dei riferimenti raggiunge zero, il modulo viene scaricato dallo spazio indirizzi del processo chiamante e l'handle non è più valido.

Sintassi

BOOL FreeLibrary(
  [in] HMODULE hLibModule
);

Parametri

[in] hLibModule

Handle per il modulo di libreria caricato. LoadLibrary, LoadLibraryEx,
La funzione GetModuleHandle o GetModuleHandleEx restituisce questo handle.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per ottenere informazioni sull'errore estese, chiamare la funzione GetLastError .

Commenti

Il sistema gestisce un numero di riferimenti per processo per ogni modulo caricato. Un modulo caricato all'inizializzazione del processo a causa del collegamento dinamico in fase di caricamento ha un numero di riferimenti di uno. Il conteggio dei riferimenti per un modulo viene incrementato ogni volta che il modulo viene caricato da una chiamata a LoadLibrary. Il conteggio dei riferimenti viene incrementato anche da una chiamata a LoadLibraryEx a meno che il modulo non venga caricato per la prima volta e che venga caricato come file di dati o immagine.

Il conteggio dei riferimenti viene decretato ogni volta che viene chiamata la funzione FreeLibrary o FreeLibraryAndExitThread per il modulo. Quando il numero di riferimenti di un modulo raggiunge zero o il processo termina, il sistema scarica il modulo dallo spazio indirizzi del processo. Prima di scaricare un modulo di libreria, il sistema consente al modulo di scollegarsi dal processo chiamando la funzione DllMain del modulo, se ne ha una, con il valore DLL_PROCESS_DETACH. In questo modo, il modulo della libreria offre l'opportunità di pulire le risorse allocate per conto del processo corrente. Dopo il completamento della funzione del punto di ingresso, il modulo di libreria viene rimosso dallo spazio degli indirizzi del processo corrente.

Non è sicuro chiamare FreeLibrary da DllMain. Per altre informazioni, vedere la sezione Osservazioni in DllMain.

La chiamata a FreeLibrary non influisce su altri processi che usano lo stesso modulo.

Prestare attenzione quando si chiama FreeLibrary con un handle restituito da GetModuleHandle. La funzione GetModuleHandle non incrementa il conteggio dei riferimenti di un modulo, quindi il passaggio di questo handle a FreeLibrary può causare il caricamento prematuro di un modulo.

Un thread che deve scaricare la DLL in cui è in esecuzione e quindi terminare se stesso deve chiamare FreeLibraryAndExitThread anziché chiamare FreeLibrary e ExitThread separatamente. In caso contrario, può verificarsi una condizione di gara. Per informazioni dettagliate, vedere la sezione Osservazioni di FreeLibraryAndExitThread.

Esempio

Per un esempio, vedere Uso di Run-Time collegamento dinamico.

Requisiti

   
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione libloaderapi.h (includere Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

DllMain

Funzioni della libreria di collegamento dinamico

FreeLibraryAndExitThread

GetModuleHandle

GetModuleHandleEx

LoadLibrary

Collegamento dinamico in fase di esecuzione