AfxTermExtensionModule
Appelez cette fonction pour permettr à MFC de nettoyer la DLL d'extension chaque fois qu'un processus se détache de la DLL d'extension (ce qui se produit lors de la sortie du processus ou quand la DLL est déchargée à la suite d'un appel à AfxFreeLibrary).
void AFXAPI AfxTermExtensionModule(
AFX_EXTENSION_MODULE& state,
BOOL bAll = FALSE
);
Paramètres
state
Une référence à la structure AFX_EXTENSION_MODULE qui contient l'état du module DLL d'extension.boule
Si TRUE, nettoyage des modules de DLL d'extension. Sinon, nettoyage uniquement du module DLL actuel.
Notes
AfxTermExtensionModule supprime tout stockage local associé au module et supprime toutes les entrées du cache de la table des messages. 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;
new CMyDynLinkLibrary(NVC_MFC_DLLDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("NVC_MFC_DLL.DLL Terminating!\n");
// Terminate the library before destructors are called
AfxTermExtensionModule(NVC_MFC_DLLDLL);
}
return 1; // ok
}
Si votre application charge et libère les DLL d'extension dynamiquement, veillez à appeler AfxTermExtensionModule. Comme la plupart des DLL d'extension ne sont pas chargés dynamiquement (généralement, ils sont liés via les bibliothèques d'importation), l'appel à AfxTermExtensionModule n'est généralement pas nécessaire.
Les DLL d'extension de MFC doivent appeler AfxInitExtensionModule dans leur DllMain. Si la DLL exporte des objets de CRuntimeClass ou possède ses propres ressources personnalisées, vous devez également créer un objet de CDynLinkLibrary dans DllMain.
Configuration requise
En-tête : afxdll_.h