Сбой FindResource

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 и загрузку. Это можно сделать?

  • 0
    просто была похожая проблема - пытался найти ресурс с помощью MAKEINTRESOURCE (ID), и это не работало, но при изменении на FindResource (TEXT ("ID"), ..) это чудесным образом сработало. похоже на то, что предложил @EFraim
Теги:
sfx

2 ответа

3
Лучший ответ

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

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

...

::FindResource(module, L"FOO", RT_RCDATA);
  • 0
    Не работает и в любом случае бесполезно для меня, потому что я не могу получить строку IDB_PNG1 или int. Я получаю изображения \\ list-back.png в обратном вызове для ресурса
  • 0
    @cprogrammer: используйте RCDATA, и это работает. Имя файла, используемого для создания ресурса, не хранится в таблице ресурсов - имя / идентификатор.
Показать ещё 1 комментарий
0

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню