如果使用共享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的初始化和清理工作。

使用共享MFC规则的 dll 没有自动生成 dllmain 如何重写

原文地址: https://www.cveoy.top/t/topic/hQYx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录