AfxTermExtensionModule
Chiamare questa funzione per consentire a MFC nella pulizia la DLL di estensione quando ogni processo si disconnette dalla DLL (che si verifica quando viene chiuso, o quando la DLL viene scaricata in seguito a una chiamata di AfxFreeLibrary ).
void AFXAPI AfxTermExtensionModule(
AFX_EXTENSION_MODULE& state,
BOOL bAll = FALSE
);
Parametri
state
Un riferimento alla struttura di AFX_EXTENSION_MODULE contenente lo stato del modulo DLL di estensione.sfera
Se TRUE, pulizia tutti i moduli DLL di estensione. In caso contrario, pulizia solo il modulo corrente della DLL.
Note
AfxTermExtensionModule eliminato qualsiasi l'archiviazione locale associata al form e rimuove le voci dalla cache della mappa messaggi. Di seguito è riportato un esempio.
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
}
Se l'applicazione carica dinamicamente e libera DLL di estensione, assicurarsi di chiamare AfxTermExtensionModule. Poiché la maggior parte delle DLL di estensione non vengono caricati dinamicamente in genere, vengono collegati tramite le relative librerie di importazione), la chiamata a AfxTermExtensionModule non è in genere necessaria.
Le DLL di estensione MFC devono chiamare AfxInitExtensionModule nel DllMain. Se la DLL esporterà gli oggetti di CRuntimeClass o dispone di propri metodi personalizzati, è inoltre necessario creare un oggetto di CDynLinkLibrary in DllMain.
Requisiti
Intestazione: afxdll_.h