FreeLibrary 函式 (libloaderapi.h)

釋放載入的動態連結程式庫 (DLL) 模組,並視需要遞減其參考計數。 當參考計數達到零時,模組會從呼叫進程的位址空間卸載,而且控制碼不再有效。

語法

BOOL FreeLibrary(
  [in] HMODULE hLibModule
);

參數

[in] hLibModule

載入的程式庫模組控制碼。 LoadLibraryLoadLibraryEx
GetModuleHandleGetModuleHandleEx 函式會傳回此控制碼。

傳回值

如果函式成功,則傳回非零的值。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError 函式。

備註

系統會針對每個載入的模組維護每個進程參考計數。 因為載入時間動態連結而載入進程初始化的模組具有一個參考計數。 每次呼叫 LoadLibrary載入模組時,模組的參考計數都會遞增。 除非第一次載入模組,而且載入為數據或影像檔,否則參考計數也會隨著 LoadLibraryEx 的呼叫而遞增。

每次呼叫模組的FreeLibrary 或 FreeLibraryAndExitThread函式時,都會遞減參考計數。 當模組的參考計數達到零或進程終止時,系統會從進程的位址空間卸載模組。 卸載程式庫模組之前,系統會藉由呼叫模組的 DllMain 函式,如果模組具有 ,則具有 DLL_PROCESS_DETACH 值,讓模組與進程中斷連結。 這麼做可讓程式庫模組有機會清除代表目前進程配置的資源。 在進入點函式傳回之後,程式庫模組就會從目前處理序的位址空間中移除。

DllMain呼叫FreeLibrary並不安全。 如需詳細資訊,請參閱 DllMain中的一節。

呼叫 FreeLibrary 不會影響使用相同模組的其他進程。

使用GetModuleHandle所傳回的控制碼呼叫FreeLibrary時,請小心。 GetModuleHandle函式不會遞增模組的參考計數,因此將此控制碼傳遞至FreeLibrary可能會導致模組提前卸載。

執行緒必須卸載執行所在的 DLL,然後終止本身應該呼叫 FreeLibraryAndExitThread ,而不是個別呼叫 FreeLibraryExitThread 。 否則,可能會發生競爭條件。 如需詳細資訊,請參閱 FreeLibraryAndExitThread的一節。

範例

如需範例,請參閱 使用動態連結 Run-Time

需求

   
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 libloaderapi.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

DllMain

動態連結程式庫函式

FreeLibraryAndExitThread

GetModuleHandle

GetModuleHandleEx

LoadLibrary

執行時間動態連結