Partager via


AFX_EXTENSION_MODULE, structure

AFX_EXTENSION_MODULE est utilisé pendant l'initialisation des DLL d'extension MFC pour maintenir 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 de la DLL a été initialisé avec AfxInitExtensionModule.

  • hModule
    Spécifie le handle du module de la DLL.

  • hResource
    Spécifie le handle du module personnalisé de ressource de DLL.

  • pFirstSharedClass
    Un pointeur vers les informations (la structure d' CRuntimeClass ) sur classe d'exécution du module DLL la première.Utilisé pour fournir le début de la liste de classes de runtime.

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

Notes

Les DLL d'extension MFC doivent effectuer les deux actions dans leur fonction d' DllMain :

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

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

La structure d' AFX_EXTENSION_MODULE est utilisée pour stocker une copie de l'état du module DLL d'extension, y compris une copie des objets de classe runtime qui sont initialisés par la DLL d'extension dans le cadre de la construction d'objet statique normale exécutée avant qu' 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 de module stockées dans la structure d' 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

Header: afx.h

Voir aussi

Référence

AfxInitExtensionModule

AfxTermExtensionModule

Autres ressources

Structures, styles, rappels, et les tables des messages