Estrutura AFX_EXTENSION_MODULE
O AFX_EXTENSION_MODULE
é usado durante a inicialização de DLLs de extensão do MFC para manter o estado do módulo de DLL da extensão do MFC.
Sintaxe
struct AFX_EXTENSION_MODULE
{
BOOL bInitialized;
HMODULE hModule;
HMODULE hResource;
CRuntimeClass* pFirstSharedClass;
COleObjectFactory* pFirstSharedFactory;
};
Parâmetros
bInitialized
TRUE se o módulo de DLL tiver sido inicializado com AfxInitExtensionModule
.
hModule
Especifica o identificador do módulo de DLL.
hResource
Especifica o identificador do módulo de recurso personalizado de DLL.
pFirstSharedClass
Um ponteiro para informações (a estrutura CRuntimeClass
) sobre a primeira classe de runtime do módulo de DLL. Usado para fornecer o início da lista de classes de runtime.
pFirstSharedFactory
Um ponteiro para a primeira fábrica de objetos do módulo de DLL (um objeto COleObjectFactory
). Usado para fornecer o início da lista de fábricas de classes.
Comentários
As DLLs de extensão do MFC precisam fazer duas coisas em sua função DllMain
:
Chamar AfxInitExtensionModule e verificar o valor retornado.
Criar um objeto
CDynLinkLibrary
se a DLL estiver exportando objetos CRuntimeClass ou tiver os próprios recursos personalizados.
A estrutura AFX_EXTENSION_MODULE
é usada para manter uma cópia do estado do módulo de DLL da extensão do MFC, incluindo uma cópia dos objetos de classe de runtime que foram inicializados pela DLL de extensão do MFC como parte da construção de objeto estático normal executada antes de DllMain
de ser inserido. Por exemplo:
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;
As informações do módulo armazenadas na estrutura AFX_EXTENSION_MODULE
podem ser copiadas para o objeto CDynLinkLibrary
. Por exemplo:
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;
}
Requisitos
Cabeçalho: afx.h
Confira também
Estruturas, estilos, retornos de chamada e mapas de mensagem
Módulo AfxInitExtensionModule
Módulo AfxTermExtensionModule