我想从资源文件中获取.png图像。
res.rc
TEST_BKG RC_DATA "img\\mainwnd_bkg.png"
-
main.c
HRSRC hRsrc = FindResource(NULL,(LPCSTR)"TEST_BKG", RT_RCDATA);
但我有1813错误:ERROR_RESOURCE_TYPE_NOT_FOUND
我创建了新文件并再次尝试使用BITMAP:
1 BITMAP "img/mainwnd_bkg.bmp"
2 RC_DATA "img/mainwnd_bkg.png"
的Src:
int main()
{
HRSRC hRsrc = FindResource(NULL,MAKEINTRESOURCE(1), BITMAP);
if (!hRsrc)
printf ("err");
hRsrc = FindResource(NULL,MAKEINTRESOURCE(2), RT_RCDATA);
if (!hRsrc)
printf ("err2");
getchar();
return 0;
}
我只得到" err2"。
答案 0 :(得分:4)
此错误条件表示在您指定的模块中没有具有ID和类型组合的资源。
最可能的解释是您正在使用UNICODE
进行编译。因此,FindResource
宏扩展为FindResourceW
。这可以解释为什么你选择投射8位字符串。大概是编译器反对,你决定使用演员。
如果是这样,演员是错的。您使用的强制转换不会更改字符串的内容,它只是告诉编译器禁止类型检查。实际上,当你提供一种不同类型的数据时,你会告诉它你正在传递一种类型的数据。作为一个宽泛的规则,你应该避免施法。
通过传递宽字符串修复代码:
HRSRC hRsrc = FindResource(NULL, L"TEST_BKG", RT_RCDATA);
你可能更喜欢明确你所调用的函数并将其写成:
HRSRC hRsrc = FindResourceW(NULL, L"TEST_BKG", RT_RCDATA);
其他合理的解释是您没有链接已编译的资源,或者编译的资源以某种方式遗漏了您的RCDATA
资源,或者提供给FindResource
的模块句柄不正确。您可以使用资源查看器查看最终可执行文件的内容。