规则DLL资源模块切换问题。 最终还是由FindResource或FindResourceEx完成,看第一个参数:传入的就是DLL或主进程EXE模块句柄.至于方法2,3为何不成功, 得看MFC源码, 如果FindResource仍然用主进程EXE句柄, 就不正确. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为这不只是资源的问题,MFC内部还需要用到很多全局变量,对于MFC规则DLL,如果使用共享DLL中的MFC方式,必须加AFX_MANAGE_STATE。 DLL中的资源ID同 执行程序中的资源ID尽量不要相同,另外,可以尝试在执行程序中的*.rc2中包含DLL的资源 文件 *.rc 你做的这个例子是将对话框封装到DLL里吧?http://www.vckbase.com/document/viewdoc/?id=543 MFC规则DLL就用方法一,知道正确的方法最重要。方法二、三请确认用到的资源句柄是否正确。 MFC规则共享DLL用方法一有些不足,所以才考虑用方法二与方法三,方法一不足是因为方法一不够灵活,我发现通过方法一设置模块句柄后,对DLL的操作整过过程似乎都只能使用AFX_MANAGE_STATE(AfxGetStaticModuleState())设置的模块句柄了(也即DLL自身的句柄),我想再在DLL内使用EXE的句柄,加载来自EXE的资源怎么都不成功。比如我一开始用:AFX_MANAGE_STATE(AfxGetStaticModuleState())在接口函数切换模块句柄时,然后DLL内部再用下面两函数获取一幅来自EXE的位图,LoadImage函数返回的句柄总是空。这是什么啊?void CMsgDialog::SetAdBtm(UINT BmpAD)//获取广告位图。{ HBITMAP hBmpAD = NULL; HINSTANCE hInstResource = NULL; // 寻找正确的位图资源所在的模块句柄 hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(BmpAD), RT_BITMAP); // Load bitmap Handle hBmpAD = (HBITMAP)::LoadImage(hInstResource, MAKEINTRESOURCE(BmpAD), IMAGE_BITMAP, 0, 0, 0); SetAdBtm(hBmpAD);}void CMsgDialog::SetAdBtm(HBITMAP hBmpAD){ m_hBmpAD=hBmpAD;} 资源下载 如何在客户端中通过域名访问IOCP服务器? 申请界面版版主 MFC容器程序嵌入WORD,程序退出时出错? 如何构造UDP数据包? 怎样不显示界面? 如何学习vc++? 请问我只有线程的ID,如何向这个线程发送消息(这个线程有消息机制)??? !!!!!!!!怎么样在VC中不读数据库,直接构造结果集Recordset!!!!!!!(靠!我就不信VB搞定的东西VC会搞不定!) error MSB6001: Invalid command 为什么处理WM_DRAWITEM时需要返回true VC高手请帮忙!
http://www.vckbase.com/document/viewdoc/?id=543
MFC规则共享DLL用方法一有些不足,所以才考虑用方法二与方法三,方法一不足是因为方法一不够灵活,我发现通过方法一设置模块句柄后,对DLL的操作整过过程似乎都只能使用AFX_MANAGE_STATE(AfxGetStaticModuleState())设置的模块句柄了(也即DLL自身的句柄),我想再在DLL内使用EXE的句柄,加载来自EXE的资源怎么都不成功。
比如我一开始用:
AFX_MANAGE_STATE(AfxGetStaticModuleState())在接口函数切换模块句柄时,然后DLL内部再用下面两函数获取一幅来自EXE的位图,LoadImage函数返回的句柄总是空。这是什么啊?void CMsgDialog::SetAdBtm(UINT BmpAD)//获取广告位图。
{
HBITMAP hBmpAD = NULL;
HINSTANCE hInstResource = NULL; // 寻找正确的位图资源所在的模块句柄
hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(BmpAD), RT_BITMAP); // Load bitmap Handle
hBmpAD = (HBITMAP)::LoadImage(hInstResource, MAKEINTRESOURCE(BmpAD), IMAGE_BITMAP, 0, 0, 0); SetAdBtm(hBmpAD);
}void CMsgDialog::SetAdBtm(HBITMAP hBmpAD)
{
m_hBmpAD=hBmpAD;
}