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

标签 c++ windows visual-studio dll mfc

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

相关文章:

visual-studio - 如何在Visual Studio 2005中添加WCF服务引用?

c++ - 在调试器中自动显示具有已知类型和长度的 void*(数组)

c++ - Xcode 中的 OpenCV C++ 错误

asp.net - 使用 Visual Studio 发布 Web 应用程序项目

c++ - 函数指针的模板参数推导失败

c++ - Windows下是宽字符还是UTF-8?

c# - 使用通配符递归地从文件夹复制文件(文件夹路径有通配符)

C++ 在窗口上输出文本

c++ - Qt 调试器与 OpenCV 卡住

c++ - NPAPI墙的NPP_NewStream是怎么调用的?自动还是通过插件请求?