Estrutura AFX_EXTENSION_MODULE
AFX_EXTENSION_MODULE é usado durante a inicialização da DLL da extensão MFC para manter o estado de módulo DLL da extensão.
struct AFX_EXTENSION_MODULE
{
BOOL bInitialized;
HMODULE hModule;
HMODULE hResource;
CRuntimeClass* pFirstSharedClass;
COleObjectFactory* pFirstSharedFactory;
};
Parâmetros
bInitialized
Verdadeiro se o módulo DLL foi inicializado com AfxInitExtensionModule.hModule
Especifica o identificador de módulo DLL.hResource
Especifica o identificador de módulo personalizado DLL de recursos do.pFirstSharedClass
Um ponteiro para a estrutura de informações (a) CRuntimeClass sobre a classe de tempo de execução do módulo DLL a primeira. Usado para fornecer o início da lista de classe de tempo de execução.pFirstSharedFactory
Um ponteiro para o módulo DLL objetos primeiro a fábrica (um objeto de COleObjectFactory ). Usado para fornecer o início da lista de fábrica da classe.
Comentários
Dlls de extensão MFC precisam fazer duas coisas na função de DllMain :
Chame AfxInitExtensionModule e verifique o valor de retorno.
Crie um objeto de CDynLinkLibrary se a DLL estiver exportando objetos de CRuntimeClass ou tem seus próprios recursos personalizados.
A estrutura de AFX_EXTENSION_MODULE é usada para manter uma cópia do estado do módulo DLL de extensão, incluindo uma cópia dos objetos da classe de tempo de execução que foram inicializados pela DLL de extensão como parte da compilação normal de objeto estático executada antes que DllMain está conectado. Por exemplo:
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;
Informações do módulo armazenada na estrutura de AFX_EXTENSION_MODULE pode ser copiada para o objeto de 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
Header: afx.h
Consulte também
Referência
Outros recursos
Estruturas, estilos, retornos de chamada e mapas de mensagem