Compartilhar via


Estrutura AFX_EXTENSION_MODULE

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

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

Parâmetros

  • bInitialized
    TRUE se o módulo DLL foi inicializado com AfxInitExtensionModule.

  • hModule
    Especifica o identificador do módulo de DLL.

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

  • pFirstSharedClass
    Um ponteiro para informações (o CRuntimeClass estruturar) sobre a classe tempo de execução primeiro DLL do módulo. Usado para fornecer o início da lista de classes em tempo de execução.

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

Comentários

DLLs de extensão do MFC precisa fazer duas coisas em seus DllMain função:

  • De telefonarAfxInitExtensionModule e verifique se o valor retornado.

  • Criar um CDynLinkLibrary objeto se a DLL será ser exportando CRuntimeClass objetos ou tem seus próprios recursos personalizados.

The AFX_EXTENSION_MODULE estrutura é usada para armazenar uma cópia da extensão do estado do módulo DLL, incluindo uma cópia dos objetos de classe em tempo de execução que foram inicializados pela extensão DLL sistema autônomo parte de construção de objeto estático normal executada antes de DllMain é inserido. Por exemplo:

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;

As informações de módulo armazenadas no AFX_EXTENSION_MODULE estrutura pode ser copiada para o CDynLinkLibrary objeto.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

Consulte também

Referência

AfxInitExtensionModule

AfxTermExtensionModule

Outros recursos

Estruturas, estilos, retornos de chamada e mapas de mensagem