Condividi tramite


Struttura AFX_EXTENSION_MODULE

Viene AFX_EXTENSION_MODULE usato durante l'inizializzazione delle DLL di estensione MFC per contenere lo stato del modulo DLL dell'estensione MFC.

Sintassi

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

Parametri

bInitialized
TRUE se il modulo DLL è stato inizializzato con AfxInitExtensionModule.

hModule
Specifica l'handle del modulo DLL.

hResource
Specifica l'handle del modulo di risorse personalizzate della DLL.

pFirstSharedClass
Puntatore a informazioni (struttura CRuntimeClass ) sulla prima classe di runtime del modulo DLL. Usato per fornire l'inizio dell'elenco di classi di runtime.

pFirstSharedFactory
Puntatore alla prima factory dell'oggetto (oggetto COleObjectFactory ) del modulo DLL. Usato per fornire l'inizio dell'elenco di class factory.

Osservazioni:

Le DLL di estensione MFC devono eseguire due operazioni nella funzione DllMain :

La AFX_EXTENSION_MODULE struttura viene usata per contenere una copia dello stato del modulo DLL dell'estensione MFC, inclusa una copia degli oggetti classe di runtime inizializzati dalla DLL dell'estensione MFC come parte della normale costruzione di oggetti statici eseguita prima DllMain di essere immessa. Ad esempio:

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;

Le informazioni sul modulo archiviate nella AFX_EXTENSION_MODULE struttura possono essere copiate nell'oggetto CDynLinkLibrary . Ad esempio:

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

Requisiti

Intestazione: afx.h

Vedi anche

Strutture, stili, callback e mappe messaggi
AfxInitExtensionModule
AfxTermExtensionModule