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 内容的两个函数:

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;
}

要求

页眉: afx.h

请参见

参考

AfxInitExtensionModule

AfxTermExtensionModule

其他资源

结构、样式、回调和消息映射