AFX_EXTENSION_MODULE 結構
AFX_EXTENSION_MODULE 在 MFC 擴充 DLL 時所用的初始化保存擴充 DLL 模組狀態。
struct AFX_EXTENSION_MODULE
{
BOOL bInitialized;
HMODULE hModule;
HMODULE hResource;
CRuntimeClass* pFirstSharedClass;
COleObjectFactory* pFirstSharedFactory;
};
參數
bInitialized
TRUE ,如果 DLL 模組已初始化的 AfxInitExtensionModule。hModule
指定 DLL 模組的控制代碼。hResource
指定 DLL 自訂資源模組的控制代碼。pFirstSharedClass
對資訊 ( CRuntimeClass 結構) 的指標有關 DLL 模組的第一個執行階段類別。 用來提供執行階段類別清單的開頭。pFirstSharedFactory
對 DLL 模組的指標首先物件 Factory ( COleObjectFactory 物件)。 用來提供 Class Factory 清單的開頭。
備註
MFC 擴充 DLL 必須在其 DllMain 的兩個項目):
呼叫 AfxInitExtensionModule 並檢查傳回值。
建立 CDynLinkLibrary 物件 DLL 匯出 CRuntimeClass 物件或擁有自己的自訂資源。
AFX_EXTENSION_MODULE 結構是用來保存擴充 DLL 模組狀態的複本,包括由擴充 DLL 初始化為執行一般靜態物件建構的一部分執行階段類別物件的複本,在 DllMain 中項目之前。 例如:
static AFX_EXTENSION_MODULE NVC_MFC_DLLDLL = { NULL, NULL };
extern "C" int APIENTRY
DllMain(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 物件。 例如:
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;
}
需求
Header: afx.h