AFX_EXTENSION_MODULE (Estructura)
AFX_EXTENSION_MODULE
se usa durante la inicialización de archivos DLL de extensión MFC para contener el estado del módulo DLL de extensión MFC.
Sintaxis
struct AFX_EXTENSION_MODULE
{
BOOL bInitialized;
HMODULE hModule;
HMODULE hResource;
CRuntimeClass* pFirstSharedClass;
COleObjectFactory* pFirstSharedFactory;
};
Parámetros
bInitialized
TRUE si el módulo DLL se ha inicializado con AfxInitExtensionModule
.
hModule
Especifica el identificador del módulo DLL.
hResource
Especifica el identificador del módulo de recursos personalizados DLL.
pFirstSharedClass
Puntero a la información (la estructura CRuntimeClass
) sobre la primera clase en tiempo de ejecución del módulo DLL. Se usa para proporcionar el inicio de la lista de clases en tiempo de ejecución.
pFirstSharedFactory
Puntero al primer generador de objetos del módulo DLL (un objeto COleObjectFactory
). Se usa para proporcionar el inicio de la lista de generadores de clases.
Comentarios
Las DLL de extensión de MFC deben realizar dos cosas en su función DllMain
:
Llama a AfxInitExtensionModule y comprueba el valor devuelto.
Crea un objeto
CDynLinkLibrary
si la DLL va a exportar objetos CRuntimeClass o tiene sus propios recursos personalizados.
La AFX_EXTENSION_MODULE
estructura se usa para contener una copia del estado del módulo DLL de extensión MFC, incluida una copia de los objetos de clase en tiempo de ejecución inicializados por el archivo DLL de extensión MFC como parte de la construcción normal de objetos estáticos ejecutado antes DllMain
de escribirse. Por ejemplo:
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;
La información del módulo almacenada en la AFX_EXTENSION_MODULE
estructura se puede copiar en el CDynLinkLibrary
objeto. Por ejemplo:
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
Encabezado: afx.h
Consulte también
Estructuras, estilos, devoluciones de llamada y mapas de mensajes
AfxInitExtensionModule
AfxTermExtensionModule