C++ FindResource失败

C++ FindResource失败,c++,windows,sfx,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"

我有一段这样的代码

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

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

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

...

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

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

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

...

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

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

list back PNG“图像\\list back.PNG”

那么你确实可以做到:

hrsrc=::FindResource(模块,L“list back”,L“PNG”)


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

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

list back PNG“图像\\list back.PNG”

那么你确实可以做到:

hrsrc=::FindResource(模块,L“list back”,L“PNG”)


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

不起作用,而且对我来说也没有任何用处,因为我无法获取IDB_PNG1字符串或int。我在回调中接收图像\\list-back.png以供参考resource@cprogrammer:使用RCDATA,它就会工作。用于创建资源的文件名未存储在资源表中-名称/标识符为。我仍然必须使用MAKEINTRESOURCE(FOO),不能与“FOO”一起使用。至少当资源位于dll中且调用位于exe中时。我用PEExplorer查看过,你是对的,路径没有存储在资源表中-这是一条死胡同,但我需要找到一种方法来链接.rc中的资源(将生成rc),使我能够从exe中“找到”该资源(无需重新编译exe)。不起作用,而且对我来说没有任何用处,因为我无法获取IDB_PNG1字符串或int。我在回调中接收到图像\\list-back.png,以便resource@cprogrammer:使用RCDATA,它就会工作。用于创建资源的文件名未存储在资源表中-名称/标识符为。我仍然必须使用MAKEINTRESOURCE(FOO),不能与“FOO”一起使用。至少当资源位于dll中且调用位于exe中时。我已经用PEExplorer查看过了,您是对的,路径没有存储在资源表中-这是一条死路,但我需要找到一种方法来链接.rc中的资源(将生成rc),以便从exe中“找到”该资源(无需重新编译exe)。只是有类似的问题-正在尝试使用MAKEINTRESOURCE(ID)查找资源这不起作用,但当更改为FindResource(文本(“ID”)时,它奇迹般地起作用。类似于@EFraim建议的,只是有类似的问题-尝试使用MAKEINTRESOURCE(ID)查找资源,但这不起作用,但当更改为findresource(文本(“ID”),…)时,它奇迹般地起作用。与@EFraim的建议类似