AFX_EXTENSION_MODULE 结构
在 MFC 扩展 DLL 初始化期间使用 AFX_EXTENSION_MODULE
来保存 MFC 扩展 DLL 模块的状态。
语法
struct AFX_EXTENSION_MODULE
{
BOOL bInitialized;
HMODULE hModule;
HMODULE hResource;
CRuntimeClass* pFirstSharedClass;
COleObjectFactory* pFirstSharedFactory;
};
参数
bInitialized
如果 DLL 模块已使用 AfxInitExtensionModule
初始化,则为 TRUE。
hModule
指定 DLL 模块的句柄。
hResource
指定 DLL 自定义资源模块的句柄。
pFirstSharedClass
指向有关 DLL 模块第一个运行时类的(CRuntimeClass
结构)的信息的指针。 用于提供运行时类列表的开头。
pFirstSharedFactory
指向 DLL 模块的第一个对象工厂(对象 COleObjectFactory
)的指针。 用于提供类工厂列表的开始。
备注
MFC 扩展 DLL 在 DllMain
函数中需要执行两项操作:
调用 AfxInitExtensionModule 并检查返回值。
如果 DLL 将导出 CRuntimeClass 对象或具有自己的自定义资源,请创建一个
CDynLinkLibrary
对象。
该 AFX_EXTENSION_MODULE
结构用于保存 MFC 扩展 DLL 模块状态的副本,包括已由 MFC 扩展 DLL 初始化的运行时类对象的副本,作为输入 DllMain
之前执行的正常静态对象构造的一部分。 例如:
static AFX_EXTENSION_MODULE NVC_MFC_DLLDLL;
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");
// MFC 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;
}
要求
标头: afx.h