首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CBitmap::LoadBitmap()拒绝加载资源

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

Stack Overflow用户
提问于 2014-04-08 10:17:43
回答 2查看 9.1K关注 0票数 3

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

代码语言:javascript
复制
BOOL CMyExportedClass::Create(CWnd* pParentWnd /*= NULL*/)
{
    if (!m_bitmap.LoadBitmap(IDB_BITMAP1))
        return FALSE;
    // ...
}

从MFC应用程序加载DLL。然后在应用程序InitInstance()函数中调用DLL的导出函数,该函数最终调用CMyExportedClass::Create()

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

位图文件是我的DLL项目的一部分,IDB_BITMAP1是在.rc文件和Resoure.h中定义的

MyDLL.rc:

代码语言:javascript
复制
IDB_BITMAP1             BITMAP                  "res\\mybitmap.bmp"

Resourcee.h:

代码语言:javascript
复制
#define IDB_BITMAP1                     1034

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

LoadBitmap()拒绝加载资源的可能原因是什么,以及如何解决这个问题?

编辑:

如果我不使用m_bitmap.LoadBitmap(IDB_BITMAP1),而是执行以下操作,我可以成功地加载资源:

代码语言:javascript
复制
HBITMAP hBitmap = (HBITMAP)LoadImage(hCurrentModule, MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, 0);
if(hBitmap)
    m_bitmap.Attach((HBITMAP)hBitmap);

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-08 11:04:12

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

我的建议是使用LoadImage并对搜索哪个模块的资源进行精确控制。

票数 2
EN

Stack Overflow用户

发布于 2014-11-12 15:30:58

实际上,不执行搜索。MFC根据文档从可执行文件而不是dll加载位图:

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

编辑(以完成回答):

相反,可以使用这个(或者像您所做的那样使用LoadImage() ):

代码语言:javascript
复制
m_bitmap.Attach(::LoadBitmap(hCurrentModule, MAKEINTRESOURCE(IDB_BITMAP1)));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22934040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档