C++ 加载png时FindResource给出错误1813

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,

我正在尝试按照MSDN从资源加载图像文件。我觉得提供的一些代码是废话,但我不知道如何让它工作。调用
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
    );