C++ 加载png时FindResource给出错误1813
我正在尝试按照MSDN从资源加载图像文件。我觉得提供的一些代码是废话,但我不知道如何让它工作。调用C++ 加载png时FindResource给出错误1813,c++,C++,我正在尝试按照MSDN从资源加载图像文件。我觉得提供的一些代码是废话,但我不知道如何让它工作。调用FindResource()失败,错误代码为1813 我在C++项目中添加了一个 RC < /Cord>资源文件(我使用VisualStudio 2013作为IDE),并添加了一个PNG文件,其中ID为代码> IDBPNG1: 本教程将资源定义为IDR\u SAMPLE\u IMAGE“turtle.jpg”,然后调用FindResource() FindResource( NULL,
FindResource()
失败,错误代码为1813
我在C++项目中添加了一个<代码> RC < /Cord>资源文件(我使用VisualStudio 2013作为IDE),并添加了一个PNG文件,其中ID为代码> IDBPNG1:
本教程将资源定义为IDR\u SAMPLE\u IMAGE“turtle.jpg”
,然后调用FindResource()
FindResource(
NULL, // This component.
L"SampleImage", // Resource name.
L"Image"); // Resource type.
我觉得L“SampleImage”
应该是L“IDR\u SAMPLE\u IMAGE”
,L“IMAGE”
应该是L“IMAGE”
,因为提供的值似乎不存在于任何地方,但我的等效调用不起作用:
FindResource(
NULL, // This component
"IDB_PNG1", // Resource name
"PNG", // Resource type
);
我做错了什么
我不知道它是否相关,但每当我在代码中使用L“string”
时,我都会得到一个错误(类型为“const wchar\u t*”的参数与类型为“LPCSTR”的参数不兼容
),因此我一直在忽略L,这似乎对我所遵循的每个其他示例都有效,所以我不认为这是问题所在。样本与“SampleImage”名称有点混淆。令人困惑的是,Win32资源可以用字符串或(16位)整数标识。这个示例引导您使用字符串(例如L“SampleImage”),但VisualStudioIDE(坦白地说,我遇到的大多数代码)更喜欢整数。为了允许这两种类型,Win32资源函数采用LPCWSTR类型的参数,调用者应该使用MAKEINTRESOURCE宏将整数ID转换为“伪字符串”。这同样适用于资源类型。有一些内置类型(图标、光标、位图等),但您始终可以使用字符串定义自己的类型
如果您在代码中查找,您应该能够找到具有IDB_PNG1定义的头文件(可能是Resource.h)。它很可能是一个小整数,因此需要使用MAKEINTRESOURCE宏。PNG可能没有在任何地方定义,而且它不是内置的资源类型之一,因此资源编译器将其视为字符串,您也应该如此
e、 g
试试这个,让我们知道它是否有效。
(如果我听起来好像我没有C++的线索,那主要是因为我没有一个线索,我用C++来讨论,但是:D)
FindResource(
NULL, // This component
MAKEINTRESOURCE(IDB_PNG1), // Resource name
L"PNG", // Resource type
);