Сбой FindResource

У меня есть такой код

  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 я получу этот путь / идентификатор, чем FindResource и загрузки. Можно ли это сделать?

2 ответа

Решение

Первая запись в строке RCDATA - это имя (или идентификатор). Последняя запись просто "что должен использовать компилятор ресурсов для создания этой записи" - имя не сохраняется в исполняемом файле.

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

...

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

Кроме того, вы можете хранить ресурс со строковым идентификатором вместо числового идентификатора, например так:

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

Тогда вы действительно можете сделать:

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

Это менее эффективно, чем решение, предоставленное Эриком, но может быть более управляемым, если вы пытаетесь получить доступ к какому-либо ресурсу, скажем, из статической библиотеки, тогда как сам ресурс встраивается в DLL/EXE на более позднем этапе. (Вам не нужно знать числовой идентификатор, просто согласитесь на символическое имя в ваших модулях)

Другие вопросы по тегам