Compartir a través de


AFX_EXTENSION_MODULE (Estructura)

AFX_EXTENSION_MODULE se usa durante la inicialización de archivos DLL de extensión MFC para contener el estado del módulo DLL de extensión MFC.

Sintaxis

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

Parámetros

bInitialized
TRUE si el módulo DLL se ha inicializado con AfxInitExtensionModule.

hModule
Especifica el identificador del módulo DLL.

hResource
Especifica el identificador del módulo de recursos personalizados DLL.

pFirstSharedClass
Puntero a la información (la estructura CRuntimeClass) sobre la primera clase en tiempo de ejecución del módulo DLL. Se usa para proporcionar el inicio de la lista de clases en tiempo de ejecución.

pFirstSharedFactory
Puntero al primer generador de objetos del módulo DLL (un objeto COleObjectFactory). Se usa para proporcionar el inicio de la lista de generadores de clases.

Comentarios

Las DLL de extensión de MFC deben realizar dos cosas en su función DllMain:

  • Llama a AfxInitExtensionModule y comprueba el valor devuelto.

  • Crea un objeto CDynLinkLibrary si la DLL va a exportar objetos CRuntimeClass o tiene sus propios recursos personalizados.

La AFX_EXTENSION_MODULE estructura se usa para contener una copia del estado del módulo DLL de extensión MFC, incluida una copia de los objetos de clase en tiempo de ejecución inicializados por el archivo DLL de extensión MFC como parte de la construcción normal de objetos estáticos ejecutado antes DllMain de escribirse. Por ejemplo:

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;

La información del módulo almacenada en la AFX_EXTENSION_MODULE estructura se puede copiar en el CDynLinkLibrary objeto. Por ejemplo:

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

Encabezado: afx.h

Consulte también

Estructuras, estilos, devoluciones de llamada y mapas de mensajes
AfxInitExtensionModule
AfxTermExtensionModule