Поделиться через


Структура AFX_EXTENSION_MODULE

Он AFX_EXTENSION_MODULE используется во время инициализации библиотек DLL расширения MFC для хранения состояния модуля DLL расширения MFC.

Синтаксис

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

Параметры

bInitialized
ЗНАЧЕНИЕ TRUE, если модуль DLL инициализирован с AfxInitExtensionModuleпомощью .

hModule
Задает дескриптор модуля DLL.

hResource
Задает дескриптор пользовательского ресурса DLL.

pFirstSharedClass
Указатель на сведения ( CRuntimeClass структуру) о первом классе среды выполнения модуля DLL. Используется для предоставления начала списка классов среды выполнения.

pFirstSharedFactory
Указатель на первую фабрику объектов модуля DLL ( COleObjectFactory объект). Используется для предоставления начала списка фабрики классов.

Замечания

Библиотеки DLL расширения MFC должны выполнять две задачи в их DllMain функции:

  • Вызовите AfxInitExtensionModule и проверка возвращаемое значение.

  • CDynLinkLibrary Создайте объект, если библиотека DLL будет экспортировать объекты CRuntimeClass или имеет собственные пользовательские ресурсы.

Структура AFX_EXTENSION_MODULE используется для хранения копии состояния модуля DLL расширения MFC, включая копию объектов класса среды выполнения, которые были инициализированы библиотекой DLL расширения MFC в рамках обычной конструкции статических объектов, выполняемой перед DllMain вводом. Например:

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;

Сведения о модуле AFX_EXTENSION_MODULE , хранящиеся в структуре, можно скопировать в CDynLinkLibrary объект. Например:

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

Требования

Заголовок: afx.h

См. также

Структуры, стили, обратные вызовы и схемы сообщений
AfxInitExtensionModule
AfxTermExtensionModule