dll加载对话框,修复afxwin1.inl line:21

chuoyong7289 2021-05-03 07:11:35
dll项目中添加基于CDialog的对话框类CMainDlg

//实例化对话框
CMainDlg *mainDlg;
mainDlg=new CMainDlg;
mainDlg->Create(IDD_DIALOG_Main); //执行到此处程序崩溃
mainDlg->ShowWindow(SW_SHOW);

1、常规方案:函数头部添加AFX_MANAGE_STATE(AfxGetStaticModuleState())即可。
上述宏定义与DllMain()入口函数会导致“fatal error LNK1169: 找到一个或多个多重定义的符号”的错误。
2、当前将就方案:
HINSTANCE exe_hInstance = GetModuleHandle(NULL);
HINSTANCE dll_hInstance = GetModuleHandle("Test.dll");
AfxSetResourceHandle(dll_hInstance); //切换状态
//函数主体
AfxSetResourceHandle(exe_hInstance); //恢复状态
该方案显示对话框前,需要忽略两次bug提示:afxwin1.inl line:21
项目属性字符集已改为未设置。该方案如能修复bug提示也不失为一个完美方案!
...全文
2875 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2021-05-05
  • 打赏
  • 举报
回复
可以试试把把创建放到DLL中
extern "C" __declspec( dllexport ) HWND CreateModlessDlg(HWND hParent)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CWnd *pParent = CWnd::FromHandle(hParent);
CMainDlg *mainDlg =new CMainDlg(pParent);
mainDlg->Create(IDD_DIALOG_Main);    
mainDlg->ShowWindow(SW_SHOW);

return mainDlg->m_hWnd;
}

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧