Partager via


structure d'AFX_EXTENSION_MODULE

AFX_EXTENSION_MODULE est utilisé lors de l'initialisation des DLL d'extension de MFC pour gérer l'état du module DLL d'extension.

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

Paramètres

  • bInitialized
    TRUE si le module DLL a été initialisé avec AfxInitExtensionModule.

  • hModule
    Spécifie le gestionnaire du module DLL.

  • hRessource
    Spécifie le gestionnaire du module personnalisé de ressource DLL.

  • pFirstSharedClass
    Un pointeur vers les informations (la structure CRuntimeClass ) à propos de la première classe runtime du module. Utilisé pour fournir le début de la liste de classe runtime.

  • pFirstSharedFactory
    Un pointeur vers la première fabrique d'objet du module DLL (objet de COleObjectFactory ). Utilisé pour fournir le début de la liste de classe de fabrique.

Notes

Les DLL d'extension de MFC doivent avoir deux éléments dans leur fonction DllMain :

  • Appelez AfxInitExtensionModule et vérifiez la valeur de retour.

  • Créez un objet de CDynLinkLibrary si la DLL exporte les objets de CRuntimeClass ou possède ses propres ressources personnalisées.

La structure de AFX_EXTENSION_MODULE est utilisée pour conserver une copie de l'état du module DLL d'extension, y compris une copie des objets de classe runtime qui ont été initialisés par la DLL d'extension dans le contexte de la construction normale d'objets statique exécutée avant que DllMain soit entré. Par exemple :

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;

Les informations du module stockées dans la structure de AFX_EXTENSION_MODULE peuvent être copiées dans l'objet de CDynLinkLibrary. Par exemple :

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

Configuration requise

En-tête : afx.h

Voir aussi

Référence

AfxInitExtensionModule

AfxTermExtensionModule

Autres ressources

Structures, les styles, rappels, et les tables des messages