匯出的 DLL 函式進入點
匯出的 dll 的函式,針對使用 AFX_MANAGE_STATE 巨集從 DLL 模組切換至呼叫的應用程式 DLL 時,維護適當的全域狀態。
此巨集呼叫時,設定pModuleState,變數的指標, AFX_MODULE_STATE有效的模組狀態的其餘部分的函式的包含範圍中包含的模組的全域資料結構。 離開包含巨集的範圍,會自動還原上一個有效的模組狀態。
達成這樣的這種切換效果建構執行個體的 AFX_MODULE_STATE 在堆疊上的類別。 在其建構函式,這個類別取得目前模組狀態的指標,並將它儲存在成員變數,並設定pModuleState為新的有效的模組狀態。 在其解構函式,這個類別還原儲存在其為有效的模組狀態的成員變數的指標。
如果您有匯出的函式,例如啟動對話方塊,在您的 DLL,您需要將下列程式碼加入函式的開頭:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
這會交換目前模組狀態與所傳回的狀態 AfxGetStaticModuleState 到目前領域的結束為止。
如果 Dll 中的資源的問題就會發生AFX_MANAGE_STATE不會使用巨集。 根據預設,MFC 會使用主應用程式的資源控制代碼以載入資源樣板。 這個樣板實際上儲存在 DLL 中。 MFC 模組狀態資訊的沒的問題的根本原因是AFX_MANAGE_STATE巨集。 資源控制代碼是從 MFC 模組狀態中復原。 沒有切換模組狀態會讓使用錯誤的資源控制代碼。
AFX_MANAGE_STATE不需要放到在 DLL 中的每個函式。 例如, InitInstance可由 MFC 中的程式碼的應用程式,而不需呼叫AFX_MANAGE_STATE因為 MFC 會自動移之前的模組狀態InitInstance和再切換回原處之後InitInstance傳回。 同樣適用於所有的訊息對應處理常式。 標準 dll 裡實際上擁有路由任何訊息前便會自動切換模組狀態的特殊的主控視窗程序。