Compartilhar via


Estrutura AFX_EXTENSION_MODULE

O AFX_EXTENSION_MODULE é usado durante a inicialização de DLLs de extensão do MFC para manter o estado do módulo de DLL da extensão do MFC.

Sintaxe

struct AFX_EXTENSION_MODULE
{
    BOOL bInitialized;
    HMODULE hModule;
    HMODULE hResource;
    CRuntimeClass* pFirstSharedClass;
    COleObjectFactory* pFirstSharedFactory;
};

Parâmetros

bInitialized
TRUE se o módulo de DLL tiver sido inicializado com AfxInitExtensionModule.

hModule
Especifica o identificador do módulo de DLL.

hResource
Especifica o identificador do módulo de recurso personalizado de DLL.

pFirstSharedClass
Um ponteiro para informações (a estrutura CRuntimeClass) sobre a primeira classe de runtime do módulo de DLL. Usado para fornecer o início da lista de classes de runtime.

pFirstSharedFactory
Um ponteiro para a primeira fábrica de objetos do módulo de DLL (um objeto COleObjectFactory). Usado para fornecer o início da lista de fábricas de classes.

Comentários

As DLLs de extensão do MFC precisam fazer duas coisas em sua função DllMain:

  • Chamar AfxInitExtensionModule e verificar o valor retornado.

  • Criar um objeto CDynLinkLibrary se a DLL estiver exportando objetos CRuntimeClass ou tiver os próprios recursos personalizados.

A estrutura AFX_EXTENSION_MODULE é usada para manter uma cópia do estado do módulo de DLL da extensão do MFC, incluindo uma cópia dos objetos de classe de runtime que foram inicializados pela DLL de extensão do MFC como parte da construção de objeto estático normal executada antes de DllMain de ser inserido. Por exemplo:

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;

As informações do módulo armazenadas na estrutura AFX_EXTENSION_MODULE podem ser copiadas para o objeto CDynLinkLibrary. Por exemplo:

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

Requisitos

Cabeçalho: afx.h

Confira também

Estruturas, estilos, retornos de chamada e mapas de mensagem
AfxInitExtensionModule
AfxTermExtensionModule