AfxTermExtensionModule
void AFXAPI AfxTermExtensionModule(
AFX_EXTENSION_MODULE& state,
BOOL bAll = FALSE
);
参数:
state
对一个AFX_EXTENSION_MODULE结构的引用,其中包含了扩展DLL模块的状态。
bAll
如果为TRUE,清除所有的扩展DLL模块。否则,只清除当前的DLL模块。
说明:
调用这个函数,使每个进程与DLL分离(这在进程退出时发生,或者是由于调用了AfxFreeLibrary,DLL被卸载)的时候MFC可以清除扩展DLL。
AfxTermExtensionModule将删除所有与模块相连的局部内容并从消息映射中除去所有的入口。例如:
static AFX_EXTENSION_MODULE extensionDLL;
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
// 扩展 DLL 的一次性初始化
if(!AfxInitExtensionModule( extensionDLL, hInstance)) return 0;
// 任务:执行其它的初始化工作
}
else if(dwReason == DLL_PROCESS_DETACH)
{
// 扩展DLL的每个进程结束
AfxTermExtensionModule(extensionDLL);
// 任务:执行其它的清除工作。
}
return 1; // 完成
}
如果你的应用程序动态地载入、释放扩展DLL,确保调用了AfxTermExtensionModule。因为大多数扩展DLL不是动态载入(通常,它们与其引入库相连接)的,通常没有必要调用AfxTermExtensionModule。
MFC的扩展DLL需要在它们的DllMain中调用AfxInitExtensionModule。如果DLL将输出CRuntimeClass对象或者具有它自己的资源,你也需要在DllMain中创建CDynLinkLibrary对象。
请参阅:
AfxInitExtensionModule