gpt4 book ai didi

c++ - FindResource 在加载 png 时出现错误 1813

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:45 27 4
gpt4 key购买 nike

我正在尝试关注 this tutorial在 MSDN 上从资源加载图像文件。我感觉所提供的一些代码是胡说八道,但我不知道如何让它工作。调用FindResource()一直失败,错误代码为 1813。

我添加了一个 .rc资源文件添加到我的 C++ 项目(我使用 Visual Studio 2013 作为我的 IDE),并添加了一个 ID 为 IDB_PNG1 的 png 文件。 :

enter image description here

教程将资源定义为IDR_SAMPLE_IMAGE IMAGE "turtle.jpg" , 然后调用 FindResource()作为

FindResource(
NULL, // This component.
L"SampleImage", // Resource name.
L"Image"); // Resource type.

我有一种感觉 L"SampleImage"应该是 L"IDR_SAMPLE_IMAGE"L"Image"应该是 L"IMAGE" ,因为提供的值似乎在任何地方都不存在,但我的等效调用不起作用:

FindResource(
NULL, // This component
"IDB_PNG1", // Resource name
"PNG", // Resource type
);

我做错了什么?

我不知道它是否相关,但每当我使用 L"string"在我的代码中,出现错误 ( Argument of type "const wchar_t *" is incompatible with parameter of type "LPCSTR" ),所以我一直省略了 L,它似乎对我遵循的所有其他示例都有效,所以我认为这不是这里的问题。

最佳答案

示例与“SampleImage”名称有点混淆。令人困惑的部分是 Win32 资源可以用字符串或(16 位)整数来标识。该示例引导您使用字符串(例如 L"SampleImage"),但 Visual Studio IDE(坦率地说,我遇到的大多数代码)更喜欢整数。为了允许这两种类型,Win32 资源函数采用 LPCWSTR 类型的参数,并且调用者应该使用宏 MAKEINTRESOURCE 将整数 ID 转换为“伪字符串”。这同样适用于资源类型。有一些内置类型(ICON、CURSOR、BITMAP 等),但您始终可以使用字符串定义自己的类型。

如果您查看代码,您应该能够找到包含 IDB_PNG1 定义的头文件(可能是 Resource.h)。它很可能是一个小整数,因此您需要使用 MAKEINTRESOURCE 宏。 PNG 可能未在任何地方定义,并且它不是内置资源类型之一,因此资源编译器将其视为字符串,您也应该这样做。

例如

FindResource(
NULL, // This component
MAKEINTRESOURCE(IDB_PNG1), // Resource name
L"PNG", // Resource type
);

尝试一下,如果有效请告诉我们。

关于c++ - FindResource 在加载 png 时出现错误 1813,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com