1

我有一段这样的代码

  IDB_PNG1                PNG                     "images\\list-back.png"
  HRSRC hrsrc = FindResource(module, MAKEINTRESOURCE(IDB_PNG1), TEXT("PNG")); 

这工作正常,
但我不能让它工作下面的任何变体

  hrsrc = ::FindResource(module, L"images\\list-back.png", L"PNG");
  hrsrc = ::FindResource(module, L"images\\list-back", L"PNG");
  hrsrc = ::FindResource(module, L"list-back.png", L"PNG");
  hrsrc = ::FindResource(module, L"list-back", L"PNG");

GetlastError 返回 0x00000716 在图像文件中找不到指定的资源名称。
使用字符串进行搜索的正确字符串格式/方式是什么?

编辑:将生成 .rc 并将包含 .html 和 .png 文件。我希望能够在不重新编译 exe 的情况下找到并加载该文件。我需要能够在 .html 中以某种方式识别 .png 正在使用什么,在 exe 中,我将收到该路径/id,而不是 FindResource 和加载。这可以做到吗?

4

2 回答 2

5

RCDATA 行中的第一个条目是名称(或 ID)。最后一个条目只是“资源编译器应该使用什么来创建这个条目”——名称不存储在可执行文件中。

FOO  RCDATA  "images\\list-back.png"

...

::FindResource(module, L"FOO", RT_RCDATA);
于 2011-04-27T16:46:13.137 回答
0

此外,您可以使用字符串 ID 而不是数字 ID 来存储资源,如下所示:

list-back PNG "images\\list-back.png"

那么你确实可以这样做:

hrsrc = ::FindResource(module, L"list-back", L"PNG");

这比 Erik 提供的解决方案效率低,但如果您尝试从静态库访问某些资源,而资源本身在稍后阶段嵌入到 DLL/EXE 中,则可以更易于管理。(然后您不必知道数字 ID,只需在模块之间就符号名称达成一致即可)

于 2015-08-30T13:23:02.330 回答