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 模块的第一个对象工厂 ( COleObjectFactory 对象) 的指针。用于提供类工厂的开头列表。
备注
MFC 扩展 DLL 需要进行在其 DllMain 的两项操作函数:
调用 AfxInitExtensionModule 并检查返回值。
创建一 CDynLinkLibrary 对象是否 DLL 导出 CRuntimeClass 对象或有自己的自定义资源。
AFX_EXTENSION_MODULE framework 用于保存扩展 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