使用共享MFC规则的 dll 没有自动生成 dllmain 如何处理 DLL_PROCESS_DETACH你是错的 共享MFCdll 生成的 dllmain被自动隐藏了。如果强行重写会报错提示重写错误
对于使用共享 MFC 规则的 DLL,确实没有自动生成 DLLMain 函数。但是,你仍然可以手动添加 DLLMain 函数来处理 DLL_PROCESS_DETACH 事件。
以下是一个示例 DLLMain 函数的实现,用于处理 DLL_PROCESS_DETACH 事件:
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
// DLL 被加载时的处理
break;
case DLL_THREAD_ATTACH:
// 线程创建时的处理
break;
case DLL_THREAD_DETACH:
// 线程结束时的处理
break;
case DLL_PROCESS_DETACH:
// DLL 卸载时的处理
// 在这里处理 DLL_PROCESS_DETACH 事件
// ...
// 调用 AfxTermExtensionModule 函数来释放 MFC 扩展模块资源
AfxTermExtensionModule(MySharedMFCModule);
break;
}
return TRUE;
}
在 DLL_PROCESS_DETACH 事件中,你可以添加你需要执行的清理代码,例如释放资源、关闭文件句柄等。另外,还需要调用 AfxTermExtensionModule 函数来释放 MFC 扩展模块资源。
请注意,如果你使用共享 MFC 规则生成的 DLL,你不应该手动重写 DLLMain 函数。因为共享 MFC DLL 会自动处理 DLL_PROCESS_DETACH 事件,并在 DLL 卸载时自动调用 AfxTermExtensionModule 函数释放 MFC 扩展模块资源。手动重写 DLLMain 函数可能会导致错误或不正确的行为。
如果你需要在 DLL 卸载时执行一些特定的清理操作,你可以考虑使用其他方式,例如导出一个专门的函数,在需要的时候调用该函数来执行清理操作。
原文地址: https://www.cveoy.top/t/topic/hQ8j 著作权归作者所有。请勿转载和采集!