【发布时间】:2013-09-01 07:28:43
【问题描述】:
我正在尝试使用LoadBitmap 从resource file 加载图像。
我已验证资源链接正确——使用十六进制编辑器检查最终的 EXE 显示位图正确打包在 EXE 中。
我还验证了该位图是有效的——使用 LoadImage 和 LR_LOADFROMFILE 在运行时从磁盘加载位图工作正常,我稍后将它添加到 gui 元素时看到它出现。
我已经验证我用来访问资源的 ID 也是有效的 - FindResource 函数会找到资源,并且 SizeofResource 会打印位图的确切预期字节数。
所以我有一个有效的链接资源、一个有效的 ID 和一个可加载的位图。
但是,如果我从资源而不是磁盘加载,LoadBitmap 和 LoadImage 都会返回 NULL。 GetLastError 返回 0。
有什么想法吗?我在resource.rc 中#defining RT_BITMAP 是否正确?
谢谢。
resource.h
#define BMP_TEST_ID 2
resource.rc
#include "resource.h" // defines BMP_TEST_ID
#define RT_BITMAP 2
BMP_TEST_ID RT_BITMAP "TEST24.BMP"
test.c
#include <windows.h> // defines RT_BITMAP as MAKEINTRESOURCE(2)
#include "resource.h" // defines BMP_TEST_ID
HINSTANCE instance = GetModuleHandle(NULL);
if (!instance) { /* handle error */ }
/* find a bitmap resource with the ID we want -- OK! */
HRSRC rsc = FindResource(instance, RT_BITMAP, MAKEINTRESOURCE(BMP_TEST_ID));
if (!rsc) { /* handle error */ }
/* prints the exact size of the found resource -- GIVES CORRECT OUTPUT */
printf("SizeofResource: %d\n", (int) SizeofResource(instance, rsc));
// ***** THIS BIT DOESN'T WORK *****
/* load bitmap resource -- FAIL! */
HBITMAP bitmap = (HBITMAP)LoadBitmap(instance, MAKEINTRESOURCE(BMP_TEST_ID));
if (!bitmap) { /* handle error */ }
/* load bitmap from file -- OK! */
HBITMAP bitmap2 = (HBITMAP)LoadImage (NULL, "TEST24.BMP", IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if (!bitmap2) { /* handle error */ }
我的编译器是 amd64-mingw32msvc-gcc 4.6.3
【问题讨论】:
-
LoadBitmap()不是专门寻找BITMAP类型的资源吗? IE。你的声明不应该是BMP_TEST_ID BITMAP "TEST24.BMP"吗?请参阅 the documentation 上的BITMAP资源类型。 -
@WhozCraig 这行得通!让它成为你的答案,我会接受它。显然您在 .c 文件中使用 RT_BITMAP 而在 .rc 文件中使用 BITMAP
标签: c winapi bitmap cross-compiling embedded-resource