CBitmap :: LoadBitmap()拒绝加载资源

CBitmap :: LoadBitmap()拒绝加载资源,第1张

概述CBitmap :: LoadBitmap()拒绝加载资源

我正在处理一个包含位图资源的DLL。 我通过Visual Studio中的资源视图导入了该位图。 该DLL还会导出一个具有试图加载位图的函数的类:

BOol CMyExportedClass::Create(CWnd* pParentWnd /*= NulL*/) { if (!m_bitmap.LoadBitmap(IDB_BITMAP1)) return FALSE; // ... }

从MFC应用程序我加载DLL。 在应用程序InitInstance()函数内部,我调用一个最终调用CMyExportedClass::Create()的DLL的导出函数。

但是, LoadBitmap()总是返回0 ,根据文档指出内存不足(不是这种情况)或资源不存在。

位图文件是我的DLL项目的一部分, IDB_BITMAP1在.rc文件中以及在resource.h中定义 :

WFPSampler编译问题 – 找不到wfpcalloutsclassreg

Cordova Visual Studio,在windows平板电脑上安装appx

使用Visual Studio 2008编译的C ++ dll可以用于Visual Studio 2005吗?

运行windows筛选平台示例时出错

Visual Studio 2012适用于C(而非C ++)专业编程吗?

MyDLL.rc:

IDB_BITMAP1 BITMAP "res\mybitmap.bmp"

RESOURCE.H:

#define IDB_BITMAP1 1034

我已经检查过,ID只定义了一次。 FWIW:在调用LoadBitmap() ,DLL InitiInstance()函数已经成功返回。

LoadBitmap()拒绝加载资源的原因是什么?我该如何解决这个问题?

编辑:


我可以成功加载资源,而不是m_bitmap.LoadBitmap(IDB_BITMAP1)我做到以下几点:

HBITMAP hBitmap = (HBITMAP)LoadImage(hCurrentModule,MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0); if(hBitmap) m_bitmap.Attach((HBITMAP)hBitmap);

那么CBitmap::LoadBitmap()和LoadImage()函数在这里有什么LoadImage()呢?

删除msvc DLL依赖运行qt应用程序

是否有C ++免费和快速(可能是独立的)重构windows的工具?

这是消除警告的正确方法C4945(从另一个assembly已经导入的符号)?

分析在Win7 / 64的XP / 32机器上生成的windows崩溃转储?

用一个特定的项目/解决scheme启动visual studio

最可能的解释是该进程中的某个其他模块具有该ID的资源。 而搜索资源的MFC代码正在调用LoadBitmap模块的其他模块。

我的建议是使用LoadImage ,因此可以精确地控制搜索哪个模块的资源。

其实,没有搜索执行。 MFC根据文档从可执行文件,而不是DLL加载位图:

从应用程序的可执行文件加载由lpszResourcename指定的或由nIDResource中的ID号标识的位图资源。

编辑(完成答案):

而是像你所做的那样使用这个(或LoadImage() ):

m_bitmap.Attach(::LoadBitmap(hCurrentmodulee,MAKEINTRESOURCE(IDB_BITMAP1)));

总结

以上是内存溢出为你收集整理的CBitmap :: LoadBitmap()拒绝加载资源全部内容,希望文章能够帮你解决CBitmap :: LoadBitmap()拒绝加载资源所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1155314.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存