Sdílet prostřednictvím


AFX_EXTENSION_MODULE – struktura

Používá AFX_EXTENSION_MODULE se při inicializaci knihoven DLL rozšíření MFC k uložení stavu modulu KNIHOVNY DLL rozšíření MFC.

Syntaxe

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

Parametry

bInitialized
TRUE, pokud byl modul DLL inicializován pomocí AfxInitExtensionModule.

hModule
Určuje popisovač modulu DLL.

hResource
Určuje popisovač vlastního modulu prostředků knihovny DLL.

pFirstSharedClass
Ukazatel na informace ( CRuntimeClass struktura) o první třídě modulu RUNTIME modulu DLL. Slouží k zadání začátku seznamu tříd modulu runtime.

pFirstSharedFactory
Ukazatel na první objektovou továrnu (objekt) COleObjectFactory modulu DLL. Slouží k zadání začátku seznamu objektů pro vytváření tříd.

Poznámky

Knihovny DLL rozšíření MFC musí ve své DllMain funkci provádět dvě věci:

Struktura AFX_EXTENSION_MODULE se používá k uložení kopie stavu modulu DLL rozšíření MFC, včetně kopie objektů třídy runtime, které byly inicializovány knihovnou DLL rozšíření MFC jako součást normální statické objekt konstrukce spuštěna před DllMain vstupem. Příklad:

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;

Informace o modulu uložené ve AFX_EXTENSION_MODULE struktuře lze do objektu CDynLinkLibrary zkopírovat. Příklad:

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

Požadavky

Hlavička: afx.h

Viz také

Struktury, styly, zpětná volání a mapy zpráv
AfxInitExtensionModule
AfxTermExtensionModule