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


Структура AFX_EXTENSION_MODULE

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

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 ). Используется для предоставления начало списка фабрики класса.

Заметки

Задача необходимости библиотеки расширения MFC 2 действия в их функции DllMain:

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

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

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

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;

Данные модуля, который хранится в структуре 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;
}

Требования

Header: afx.h

См. также

Ссылки

AfxInitExtensionModule

AfxTermExtensionModule

Другие ресурсы

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