卸載延遲載入的 DLL

預設提供的延遲載入 Helper 會檢查延遲載入描述項是否已經有指標,以及在 pUnloadIAT 欄位中是否有一份原本匯入位址表 (IAT) 的複本。如果有,它會將清單中的指標儲存至匯入延遲描述項中。這樣使得 Helper 函式可以以名稱找出 DLL,以便支援明確卸載該 DLL。

以下是明確卸載延遲載入 DLL 的相關結構和函式:

//
// Unload support from delayimp.h
//

// routine definition; takes a pointer to a name to unload

ExternC
BOOL WINAPI
__FUnloadDelayLoadedDLL2(LPCSTR szDll);

// structure definitions for the list of unload records
typedef struct UnloadInfo * PUnloadInfo;
typedef struct UnloadInfo {
    PUnloadInfo     puiNext;
    PCImgDelayDescr pidd;
    } UnloadInfo;

// from delayhlp.cpp
// the default delay load helper places the unloadinfo records in the 
// list headed by the following pointer.
ExternC
PUnloadInfo __puiHead;

使用 LocalAllocLocalFree 實作分別做為其運算子 newdelete 的 C++ 類別可以實作 UnloadInfo 結構。這些選項保存於使用 __puiHead 做為清單標頭的標準連結清單中。

呼叫 __FUnloadDelayLoadedDLL 將試著找出您在載入 DLL 清單中提供的名稱 (必須完全相符)。如果有找到,pUnloadIAT 中的 IAT 將被複製到執行中之 IAT 上方以復原 Thunk 指標,然後程式庫將被 FreeLibrary 釋放,而符合的 UnloadInfo 記錄將從清單中解除連結並刪除,最後傳回 TRUE。

函式 __FUnloadDelayLoadedDLL2 的引數會區分大小寫。例如,您會指定:

__FUnloadDelayLoadedDLL2("user32.DLL");

而非:

__FUnloadDelayLoadedDLL2("User32.DLL");.

請參閱

參考

了解 Helper 函式