structure d'AFX_EXTENSION_MODULE
AFX_EXTENSION_MODULE est utilisé lors de l'initialisation des DLL d'extension de MFC pour gérer 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 DLL a été initialisé avec AfxInitExtensionModule.hModule
Spécifie le gestionnaire du module DLL.hRessource
Spécifie le gestionnaire du module personnalisé de ressource DLL.pFirstSharedClass
Un pointeur vers les informations (la structure CRuntimeClass ) à propos de la première classe runtime du module. Utilisé pour fournir le début de la liste de classe runtime.pFirstSharedFactory
Un pointeur vers la première fabrique d'objet du module DLL (objet de COleObjectFactory ). Utilisé pour fournir le début de la liste de classe de fabrique.
Notes
Les DLL d'extension de MFC doivent avoir deux éléments dans leur fonction DllMain :
Appelez AfxInitExtensionModule et vérifiez la valeur de retour.
Créez un objet de CDynLinkLibrary si la DLL exporte les objets de CRuntimeClass ou possède ses propres ressources personnalisées.
La structure de AFX_EXTENSION_MODULE est utilisée pour conserver une copie de l'état du module DLL d'extension, y compris une copie des objets de classe runtime qui ont été initialisés par la DLL d'extension dans le contexte de la construction normale d'objets statique exécutée avant que 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 du module stockées dans la structure de 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
En-tête : afx.h