如何手动添加 DLLmain 函数以初始化共享 MFC 规则的 DLL
如果使用共享 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/fAzE 著作权归作者所有。请勿转载和采集!