AFX_EXTENSION_MODULE, structure
AFX_EXTENSION_MODULE est utilisé pendant l'initialisation des DLL d'extension MFC pour maintenir l'état du module DLL d'extension.
struct AFX_EXTENSION_MODULE
{
BOOL bInitialized;
HMODULE hModule;
HMODULE hResource;
CRuntimeClass* pFirstSharedClass;
COleObjectFactory* pFirstSharedFactory;
};
Paramètres
bInitialized
TRUE si le module de la DLL a été initialisé avec AfxInitExtensionModule.hModule
Spécifie le handle du module de la DLL.hResource
Spécifie le handle du module personnalisé de ressource de DLL.pFirstSharedClass
Un pointeur vers les informations (la structure d' CRuntimeClass ) sur classe d'exécution du module DLL la première.Utilisé pour fournir le début de la liste de classes de runtime.pFirstSharedFactory
Un pointeur fabrique d'objet du module DLL à la première (un objet d' COleObjectFactory ).Utilisé pour fournir le début de la liste de fabrique de classes.
Notes
Les DLL d'extension MFC doivent effectuer les deux actions dans leur fonction d' DllMain :
Appelez AfxInitExtensionModule et vérifiez la valeur de retour.
Créez un objet de CDynLinkLibrary si la DLL exportera des objets de CRuntimeClass ou possède ses propres ressources personnalisées.
La structure d' AFX_EXTENSION_MODULE est utilisée pour stocker une copie de l'état du module DLL d'extension, y compris une copie des objets de classe runtime qui sont initialisés par la DLL d'extension dans le cadre de la construction d'objet statique normale exécutée avant qu' DllMain soit entré.Par exemple :
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;
Les informations de module stockées dans la structure d' AFX_EXTENSION_MODULE peuvent être copiées dans l'objet de CDynLinkLibrary .Par exemple :
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;
}
Configuration requise
Header: afx.h