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 函数中需要执行两项操作:

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

另请参阅

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