| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Вопрос по получению списка ресурсов файла. |
| Автор: AndreySol 13.7.2005, 05:48 |
| Нашел в MSDN пример (статья называется "Using Resources") как получить список ресурсов EXE или DLL файла с указанием типа и имени ресурса. Статья состоит из двух примеров - один: как имея имя ресурса загрузить его с помощью FindResource и LoadResource, а второй: как получить список имен всех ресурсов используя EnumResourceTypes. Ну сделал пробную програмку получения списка ресурсов, все вроде получилось. А потом естественно решил попробовать используя эти полученные имена ресурсов, загрузить к примеру иконку из файла. И тут облом - когда пытаюсь загружать ресурс, используя полученное имя ничего не выходит, получается постоянно "Ресурс не найден". Может кто знает как правильно "состыковать" эти два примера ? |
| Автор: Earnest 14.7.2005, 18:19 | ||
| Функция EnumResourceTypes перебирает лишь типы ресурсов, которые есть в приложении (диалоги, строки и т.д.). Можно пропустить - тебя ведь конкретные ресурсы интересуют? Чтобы добраться до имен ресурсов, нужно использовать EnumResourceNames, а там еще с языками нужно разобраться. Вот пример для строк (все надергано из кода как попало, но надеюсь, понятно):
|
| Автор: AndreySol 15.7.2005, 05:04 |
| Это я все знаю, вопрос в том что полученное имя ресурса не удается применить для его загрузки. Прикрепляю архив тестовой проги (сделана на VC++ 6.0 + SP6) посмотрите пожалуйста, что же в ней не так. Там по мессагам видно, что ресурс найден, потом загружен а все равно не возможно использовать имя для чего-то полезного. И еще проверьте плиз, правильно ли я перевел обозначения типов ресурсов ? |
| Автор: Earnest 15.7.2005, 19:12 | ||
| В общем, подробно я не разбиралась, но иконки, определенные в модуле, у тебя грузятся в раздел "Аппаратно-независимые", но там ты их не пытаешься загружать. А разделе просто "иконки" - фиг знает что. Если там, где вызывается LoadIcon, написать (ручками) правильное имя иконки, то все грузится. Для проверки открой какой-нибудь exe в студии как ресурсы и для сравнения у себя в программе. Сразу увидишь разницу. Но это не все. Вот этот вызов - просто чушь
Ты должен передать в EnumResurseTypes указатель на функцию, а передаешь BOOL, нагло к нему преобразованный - как еще не валится, непонятно. Фактически, все твои вызовы EnumResourseTypes просто ничего не делают. Да и не нужны они тебе - ты ведь просто руками все типы перебираешь. |
| Автор: AndreySol 18.7.2005, 05:05 | ||
Вообщето все взято из MSDN, может это у них там все - "нагло к нему преобразованный - как еще не валится, непонятно...". А насчет "Фактически, все твои вызовы EnumResourseTypes просто ничего не делают" - а что же тогда дерево заполняет - святой дух что ли ? И вообще не ответ это, помогли бы лучше как правильно надо исправить чтоб заработало, а обхаять - большого ума не надо. |
| Автор: Earnest 19.7.2005, 17:39 | ||||
Вместо того, чтобы обижаться, ты бы лучше подумал и внимательно прочитал ответ: там все есть.
Вызовы EnumTypesFunc и заполняют. Но только прямые, а не обратные, как предполагается в ф-и EnumResourceTypes. Еще раз повторю, вместо адреса функции типа EnumTypesFunc, ты передаешь результат ее выполнения (BOOL). И что ты этим хотел сказать? Функцию перебора типов ресурсов вообще надо вызывать один раз, причем вот так:
|
| Автор: AndreySol 20.7.2005, 06:49 |
| Ну вообще-то я такой вариант ф-ции взял не с потолка, а из MSDN - или там неправы ? По мессагам видно, что ресурс загружается и блокируется - значит имена все же правильные, почему тогда не удается загрузить через LoadIcon ? |
| Автор: Earnest 20.7.2005, 16:25 |
| Потому что LoadIcon загружает аппаратно независимые иконы, они находятся в другом разделе (RC_GROUP_ICON), а не в RC_ICON. Последнее - аппаратно-зависимые иконы, которые неведомо откуда берутся. Т.е. я загузила свое приложение, в котором точно нет никаких RC_ICON. А в списке ресурсов они есть - может, они по умолчанию всегда добавляются. Что касается примера из MSDN, то не знаю, где вы это нашли. Да и в любом случае, его тоже люди пишут, могут и ошибиться. Думать нужно в любом случае. |
| Автор: AndreySol 25.7.2005, 06:31 | ||
Выдержка из MSDN:
А нашел в статье "Using Resources". |
| Автор: Earnest 25.7.2005, 19:00 | ||
| И как из этой цитаты следует код, который ты написал? Вот твой код:
Еще раз повторяю: это НЕПРАВИЛЬНО!!! В этой строке ты ВЫЗЫВАЕШЬ функцию, вместо того, чтобы передать ее АДРЕС. |
| Автор: AndreySol 26.7.2005, 06:25 | ||
Это из той же статьи из MSDN:
|
| Автор: Earnest 26.7.2005, 17:54 | ||||
| AndreySol Это что, по твоему, одно и тоже?
и
Если ты работаешь программистом, сообщи адрес своего работодателя, напишу ему, чтобы немедленно тебя уволил. |
| Автор: Pro100XAKEP 11.5.2012, 13:37 |
| Привет всем!!! Вот у меня такая проблема я пишу в среде DEV-C++ и у меня такая ошибка линковщика происходит от фунции EnumResourceNames(dll, RT_ICON, (ENUMRESNAMEPROC) EnumResNameProc, 0); а вот что пишет DEV-C++: [Linker error] undefined reference to `_Z15EnumResNameProcPvPKcPcl@16' Кто подскажет в чём может быть проблема??? Заранее спасиба... |
| Автор: Earnest 11.5.2012, 19:56 |
| Pro100XAKEP, создай новую тему, и не здесь, а в WinAPI. |