FindResource失败

时间:2011-04-27 16:41:07

标签: c++ windows sfx

我有一段像这样的代码

  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并加载。可以这样做吗?

2 个答案:

答案 0 :(得分:4)

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

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

...

::FindResource(module, L"FOO", RT_RCDATA);

答案 1 :(得分:0)

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

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

然后你确实可以这样做:

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

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