AFX_EXTENSION_MODULE是計算機標誌,用以MFC 擴展 Dll 的初始化過程中用來保存擴展 DLL 模組的狀態。
基本介紹
- 中文名:無
- 外文名:AFX_EXTENSION_MODULE MFC
語法,參數,備註,要求,
語法
struct AFX_EXTENSION_MODULE { BOOL bInitialized; HMODULE hModule; HMODULE hResource; CRuntimeClass* pFirstSharedClass; COleObjectFactory* pFirstSharedFactory; };
參數
bInitialized
TRUEDLL 模組已初始化,如果AfxInitExtensionModule。
TRUEDLL 模組已初始化,如果AfxInitExtensionModule。
hModule
指定 DLL 模組的句柄。
指定 DLL 模組的句柄。
hResource
指定 DLL 的自定義資源模組的句柄。
指定 DLL 的自定義資源模組的句柄。
pFirstSharedClass
指向信息的指針 (CRuntimeClass結構) 有關 DLL 模組的第一個運行時類。用於提供運行時類列表的開頭。
指向信息的指針 (CRuntimeClass結構) 有關 DLL 模組的第一個運行時類。用於提供運行時類列表的開頭。
pFirstSharedFactory
DLL 模組的第一個對象工廠的指針 (COleObjectFactory對象)。用於提供類工廠列表的開頭。
DLL 模組的第一個對象工廠的指針 (COleObjectFactory對象)。用於提供類工廠列表的開頭。
備註
MFC 擴展 Dll 需要做兩件事中的其DllMain函式︰
- 調用AfxInitExtensionModule並檢查返回的值。
- 創建CDynLinkLibrary對象 DLL 將會導出CRuntimeClass對象,或在具有其自己的自定義資源。
AFX_EXTENSION_MODULE結構用來保存一份擴展 DLL 的模組狀態,包括通過擴展 DLL 初始化之前執行的普通靜態對象構造過程中的運行時類對象的副本DllMain輸入。例如:
C++
static AFX_EXTENSION_MODULE NVC_MFC_DLLDLL = { NULL, NULL };extern "C" int APIENTRYDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { // Remove this if you use lpReserved UNREFERENCED_PARAMETER(lpReserved); if (dwReason == DLL_PROCESS_ATTACH) { TRACE0("NVC_MFC_DLL.DLL Initializing!\n"); // Extension DLL one-time initialization if (!AfxInitExtensionModule(NVC_MFC_DLLDLL, hInstance)) return 0; } }
模組信息存儲在AFX_EXTENSION_MODULE結構可以複製到CDynLinkLibrary對象。例如:
C++
IMPLEMENT_DYNAMIC(CMyDynLinkLibrary, CDynLinkLibrary)CMyDynLinkLibrary::CMyDynLinkLibrary(AFX_EXTENSION_MODULE& state, BOOL bSystem) : CDynLinkLibrary(state, bSystem){ #ifndef _AFX_NO_OLE_SUPPORT m_factoryList.Construct(offsetof(COleObjectFactory, m_pNextFactory)); #endif m_classList.Construct(offsetof(CRuntimeClass, m_pNextClass)); // copy info from AFX_EXTENSION_MODULE struct ASSERT(state.hModule != NULL); m_hModule = state.hModule; m_hResource = state.hResource; m_classList.m_pHead = state.pFirstSharedClass; #ifndef _AFX_NO_OLE_SUPPORT m_factoryList.m_pHead = state.pFirstSharedFactory; #endif m_bSystem = bSystem;}