Структура 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