Freigeben über


AFX_EXTENSION_MODULE-Struktur

Dies AFX_EXTENSION_MODULE wird während der Initialisierung von MFC-Erweiterungs-DLLs verwendet, um den Zustand des MFC-Erweiterungs-DLL-Moduls zu halten.

Syntax

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

Parameter

bInitialisiert
TRUE, wenn das DLL-Modul mit AfxInitExtensionModuleinitialisiert wurde.

hModule
Gibt das Handle des DLL-Moduls an.

hResource
Gibt das Handle des benutzerdefinierten DLL-Ressourcenmoduls an.

pFirstSharedClass
Ein Zeiger auf Informationen (die CRuntimeClass Struktur) über die erste Laufzeitklasse des DLL-Moduls. Wird verwendet, um den Anfang der Laufzeitklassenliste bereitzustellen.

pFirstSharedFactory
Ein Zeiger auf die erste Objektfactory des DLL-Moduls (ein COleObjectFactory Objekt). Wird verwendet, um den Anfang der Klassenfactoryliste bereitzustellen.

Hinweise

MFC-Erweiterungs-DLLs müssen zwei Dinge in ihrer DllMain Funktion ausführen:

  • Rufen Sie AfxInitExtensionModule auf, und überprüfen Sie den Rückgabewert.

  • Erstellen Sie ein CDynLinkLibrary Objekt, wenn die DLL CRuntimeClass-Objekte exportiert oder über eigene benutzerdefinierte Ressourcen verfügt.

Die AFX_EXTENSION_MODULE Struktur wird verwendet, um eine Kopie des MFC-Erweiterungs-DLL-Modulzustands zu speichern, einschließlich einer Kopie der Laufzeitklassenobjekte, die von der MFC-Erweiterungs-DLL als Teil der normalen statischen Objektkonstruktion initialisiert wurden, die vor DllMain der Eingabe ausgeführt wird. Zum Beispiel:

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;

Die in der AFX_EXTENSION_MODULE Struktur gespeicherten Modulinformationen können in das CDynLinkLibrary Objekt kopiert werden. Zum Beispiel:

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

Anforderungen

Header: afx.h

Siehe auch

Strukturen, Stile, Rückrufe und Meldungszuordnungen
AfxInitExtensionModule
AfxTermExtensionModule