共享MFC DLL缺少dllmain:处理DLL_PROCESS_DETACH指南
共享MFC DLL缺少dllmain:如何处理DLL_PROCESS_DETACH
使用共享MFC规则构建DLL时,你可能会注意到没有自动生成dllmain函数。这可能会导致在DLL卸载时无法执行必要的清理操作。
别担心!即使Visual Studio没有自动创建,你也可以手动添加dllmain函数并处理DLL_PROCESS_DETACH事件。
手动添加dllmain
在你的DLL源文件中,添加以下代码:
#include <afxwin.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
// 处理 DLL_PROCESS_ATTACH 事件
}
else if (dwReason == DLL_PROCESS_DETACH)
{
// 处理 DLL_PROCESS_DETACH 事件
}
return TRUE;
}
处理DLL_PROCESS_DETACH
在DLL_PROCESS_DETACH部分,你可以执行清理任务,例如:
- 释放已分配的内存
- 关闭文件句柄
- 释放全局对象
示例:
else if (dwReason == DLL_PROCESS_DETACH)
{
// 释放资源
if (g_pResource)
{
delete g_pResource;
g_pResource = NULL;
}
}
重要提示:
dllmain函数由操作系统自动调用,无需手动调用。- 避免在
dllmain中调用MFC函数,因为这可能导致不可预知的问题。
通过按照上述步骤操作,你可以确保在使用共享MFC规则构建的DLL卸载时,正确执行清理操作,即使没有自动生成dllmain函数。
原文地址: https://www.cveoy.top/t/topic/fAzZ 著作权归作者所有。请勿转载和采集!