Compartilhar via


Estrutura AFX_EXTENSION_MODULE

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

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

Parâmetros

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

  • hModule
    Especifica o identificador de módulo DLL.

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

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

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

Comentários

Dlls de extensão MFC precisam fazer duas coisas na função de DllMain :

  • Chame AfxInitExtensionModule e verifique o valor de retorno.

  • Crie um objeto de CDynLinkLibrary se a DLL estiver exportando objetos de CRuntimeClass ou tem seus próprios recursos personalizados.

A estrutura de AFX_EXTENSION_MODULE é usada para manter uma cópia do estado do módulo DLL de extensão, incluindo uma cópia dos objetos da classe de tempo de execução que foram inicializados pela DLL de extensão como parte da compilação normal de objeto estático executada antes que DllMain está conectado. 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;

Informações do módulo armazenada na estrutura de AFX_EXTENSION_MODULE pode ser copiada para o objeto de 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

Header: afx.h

Consulte também

Referência

AfxInitExtensionModule

AfxTermExtensionModule

Outros recursos

Estruturas, estilos, retornos de chamada e mapas de mensagem