AFX_MANAGE_STATE(AfxGetStaticModuleState());问题

在MFC动态链接库DLL中,作者遇到对话框资源加载失败的问题,原因是调用DLL的资源而非DLL自身的资源。通过添加`AFX_MANAGE_STATE(AfxGetStaticModuleState())`解决了这个问题。此宏会自动切换当前模块状态,确保资源读取的正确性。文章还介绍了手动使用`AfxGetResourceHandle`和`AfxSetResourceHandle`切换资源句柄的方法,以及何时恢复资源句柄的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

写一个MFC规则动态链接库(regularDll.dll),在这个里面写一个函数
extern "C " _declspec(dllexport) void ShowDlg(void)
{
CMyDlg dlg;
dlg.DoModal();
AfxMessageBox( "hello ");
}
建立一个基于对话框的应用程序CallDll,添加一个按钮,在OnBtn1(){}里调用
ShowDlg函数,可以成功显示hello消息框,但是不能显示对话框,这是为什么啊,
断点调试,发现对话框执行了:if (lpDialogTemplate == NULL) return -1;可见对话框资源加载失败,这是为什么啊?高手请指教。

使用的资源不对,应该用的是DLL资源,但用了应用程序的,
加 AFX_MANAGE_STATE(AfxGetStaticModuleState());
extern "C " _declspec(dllexport) void ShowDlg(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDlg dlg;
dlg.DoModal();
AfxMessageBox( "hello ");
}使用的资源不对,应该用的是DLL资源,但用了应用程序的,
加 AFX_MANAGE_STATE(AfxGetStaticModuleState());
extern "C " _declspec(dllexpor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值