Сбой 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 на более позднем этапе. (Вам не нужно знать числовой идентификатор, просто согласитесь на символическое имя в ваших модулях)