使用共享MFC规则的 dll 没有自动生成 dllmain 如何重写
如果使用共享MFC规则的DLL没有自动生成dllmain函数,可以手动添加一个dllmain函数。dllmain函数是DLL的入口函数,用于处理DLL的初始化和清理工作。
以下是一个示例的dllmain函数:
#include <afxwin.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
// 初始化DLL,例如初始化MFC
if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
{
return FALSE;
}
break;
case DLL_PROCESS_DETACH:
// 清理DLL,例如释放资源
AfxTermExtensionModule(MyDLL);
break;
}
return TRUE;
}
在dllmain函数中,可以根据ul_reason_for_call参数的值来判断DLL是被加载还是被卸载。在DLL_PROCESS_ATTACH情况下,可以进行DLL的初始化工作,例如初始化MFC;在DLL_PROCESS_DETACH情况下,可以进行DLL的清理工作,例如释放资源。
注意,如果使用共享MFC规则的DLL,需要在dllmain函数中调用AfxWinInit函数来初始化MFC。在DLL_PROCESS_ATTACH情况下,如果AfxWinInit函数返回FALSE,表示初始化失败,可以返回FALSE来阻止DLL的加载。
另外,需要在dllmain函数的开头添加AFX_MANAGE_STATE宏,用于管理MFC的状态。
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// ...
}
通过手动添加dllmain函数,可以完成对共享MFC规则的DLL的初始化和清理工作。
原文地址: https://www.cveoy.top/t/topic/hQYx 著作权归作者所有。请勿转载和采集!