gpt4 book ai didi

c++ - CBitmap::LoadBitmap() 拒绝加载资源

转载 作者:可可西里 更新时间:2023-11-01 10:06:09 28 4
gpt4 key购买 nike

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

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

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

但是,LoadBitmap() 总是返回 0,根据 documentation表示内存不足(并非如此)或资源不存在。

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

MyDLL.rc:

IDB_BITMAP1             BITMAP                  "res\\mybitmap.bmp"

resource.h:

#define IDB_BITMAP1                     1034

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

LoadBitmap() 拒绝加载资源的可能原因是什么?我该如何解决?


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

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

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

最佳答案

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

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

关于c++ - CBitmap::LoadBitmap() 拒绝加载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22934040/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com