我正在开发一个包含位图资源的 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/