Struttura AFX_EXTENSION_MODULE

AFX_EXTENSION_MODULE viene utilizzato durante l'inizializzazione delle DLL di estensione MFC per utilizzare lo stato del modulo DLL di estensione.

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 gli handle del modulo DLL.

  • hResource
    Specifica gli handle del modulo di risorse personalizzate di DLL.

  • pFirstSharedClass
    Un puntatore a informazioni (la struttura di CRuntimeClass ) sulla prima classe di runtime del modulo DLL.Utilizzato per fornire l'inizio dell'elenco di classe di runtime.

  • pFirstSharedFactory
    Un puntatore al modulo DLL innanzitutto oggetti la factory (un oggetto di COleObjectFactory ).Utilizzato per fornire l'inizio dell'elenco di class factory.

Note

Le DLL di estensione MFC devono fare due elementi nella funzione di DllMain :

  • Chiamare AfxInitExtensionModule e controllare il valore restituito.

  • Creare un oggetto di CDynLinkLibrary se la DLL esporterà gli oggetti di CRuntimeClass o non dispone di propri metodi personalizzati.

La struttura di AFX_EXTENSION_MODULE viene utilizzata per utilizzare una copia dello stato del modulo DLL di estensione, inclusa una copia degli oggetti della classe di runtime che sono stati inizializzati dalla DLL di estensione durante la costruzione di un oggetto statico normale eseguita prima di DllMain venga inserito.Di seguito è riportato un esempio:

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;

Le informazioni del modulo archiviate nella struttura di AFX_EXTENSION_MODULE possono essere copiate nell'oggetto di CDynLinkLibrary .Di seguito è riportato un 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

Header: afx.h

Vedere anche

Riferimenti

AfxInitExtensionModule

AfxTermExtensionModule

Altre risorse

Strutture, stili, callback e di mappe messaggi