FreeLibrary 函式 (libloaderapi.h)
釋放載入的動態連結程式庫 (DLL) 模組,並視需要遞減其參考計數。 當參考計數達到零時,模組會從呼叫進程的位址空間卸載,而且控制碼不再有效。
語法
BOOL FreeLibrary(
[in] HMODULE hLibModule
);
參數
[in] hLibModule
載入的程式庫模組控制碼。 LoadLibrary、LoadLibraryEx、
GetModuleHandle或 GetModuleHandleEx 函式會傳回此控制碼。
傳回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError 函式。
備註
系統會針對每個載入的模組維護每個進程參考計數。 因為載入時間動態連結而載入進程初始化的模組具有一個參考計數。 每次呼叫 LoadLibrary載入模組時,模組的參考計數都會遞增。 除非第一次載入模組,而且載入為數據或影像檔,否則參考計數也會隨著 LoadLibraryEx 的呼叫而遞增。
每次呼叫模組的FreeLibrary 或 FreeLibraryAndExitThread函式時,都會遞減參考計數。 當模組的參考計數達到零或進程終止時,系統會從進程的位址空間卸載模組。 卸載程式庫模組之前,系統會藉由呼叫模組的 DllMain 函式,如果模組具有 ,則具有 DLL_PROCESS_DETACH 值,讓模組與進程中斷連結。 這麼做可讓程式庫模組有機會清除代表目前進程配置的資源。 在進入點函式傳回之後,程式庫模組就會從目前處理序的位址空間中移除。
從DllMain呼叫FreeLibrary並不安全。 如需詳細資訊,請參閱 DllMain中的一節。
呼叫 FreeLibrary 不會影響使用相同模組的其他進程。
使用GetModuleHandle所傳回的控制碼呼叫FreeLibrary時,請小心。 GetModuleHandle函式不會遞增模組的參考計數,因此將此控制碼傳遞至FreeLibrary可能會導致模組提前卸載。
執行緒必須卸載執行所在的 DLL,然後終止本身應該呼叫 FreeLibraryAndExitThread ,而不是個別呼叫 FreeLibrary 和 ExitThread 。 否則,可能會發生競爭條件。 如需詳細資訊,請參閱 FreeLibraryAndExitThread的一節。
範例
如需範例,請參閱 使用動態連結 Run-Time。
需求
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | libloaderapi.h (包含 Windows.h) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |