Сбой FindResource - PullRequest
       16

Сбой FindResource

1 голос
/ 27 апреля 2011

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

  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. Я хочу иметь возможность найти и загрузить эти файлы без перекомпиляции исполняемого файла. Мне нужно быть в состоянии как-то определить в .html, что использует .png, в exe я получу этот путь / идентификатор, чем FindResource и загрузка. Можно ли это сделать?

Ответы [ 2 ]

4 голосов
/ 27 апреля 2011

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

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

...

::FindResource(module, L"FOO", RT_RCDATA);
0 голосов
/ 30 августа 2015

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

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

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

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

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

...