![]() |
|
![]() ![]() ![]() |
|
AndreySol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Нашел в MSDN пример (статья называется "Using Resources") как получить список ресурсов EXE или DLL файла с указанием типа и имени ресурса. Статья состоит из двух примеров - один: как имея имя ресурса загрузить его с помощью FindResource и LoadResource, а второй: как получить список имен всех ресурсов используя EnumResourceTypes.
Ну сделал пробную програмку получения списка ресурсов, все вроде получилось. А потом естественно решил попробовать используя эти полученные имена ресурсов, загрузить к примеру иконку из файла. И тут облом - когда пытаюсь загружать ресурс, используя полученное имя ничего не выходит, получается постоянно "Ресурс не найден". Может кто знает как правильно "состыковать" эти два примера ? |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Функция EnumResourceTypes перебирает лишь типы ресурсов, которые есть в приложении (диалоги, строки и т.д.). Можно пропустить - тебя ведь конкретные ресурсы интересуют?
Чтобы добраться до имен ресурсов, нужно использовать EnumResourceNames, а там еще с языками нужно разобраться. Вот пример для строк (все надергано из кода как попало, но надеюсь, понятно):
-------------------- ... |
|||
|
||||
AndreySol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Это я все знаю, вопрос в том что полученное имя ресурса не удается применить для его загрузки.
Прикрепляю архив тестовой проги (сделана на VC++ 6.0 + SP6) посмотрите пожалуйста, что же в ней не так. Там по мессагам видно, что ресурс найден, потом загружен а все равно не возможно использовать имя для чего-то полезного. И еще проверьте плиз, правильно ли я перевел обозначения типов ресурсов ? Присоединённый файл ( Кол-во скачиваний: 20 ) ![]() |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
В общем, подробно я не разбиралась,
но иконки, определенные в модуле, у тебя грузятся в раздел "Аппаратно-независимые", но там ты их не пытаешься загружать. А разделе просто "иконки" - фиг знает что. Если там, где вызывается LoadIcon, написать (ручками) правильное имя иконки, то все грузится. Для проверки открой какой-нибудь exe в студии как ресурсы и для сравнения у себя в программе. Сразу увидишь разницу. Но это не все. Вот этот вызов - просто чушь
Ты должен передать в EnumResurseTypes указатель на функцию, а передаешь BOOL, нагло к нему преобразованный - как еще не валится, непонятно. Фактически, все твои вызовы EnumResourseTypes просто ничего не делают. Да и не нужны они тебе - ты ведь просто руками все типы перебираешь. -------------------- ... |
|||
|
||||
AndreySol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Вообщето все взято из MSDN, может это у них там все - "нагло к нему преобразованный - как еще не валится, непонятно...". А насчет "Фактически, все твои вызовы EnumResourseTypes просто ничего не делают" - а что же тогда дерево заполняет - святой дух что ли ? И вообще не ответ это, помогли бы лучше как правильно надо исправить чтоб заработало, а обхаять - большого ума не надо. |
|||
|
||||
Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Вместо того, чтобы обижаться, ты бы лучше подумал и внимательно прочитал ответ: там все есть.
Вызовы EnumTypesFunc и заполняют. Но только прямые, а не обратные, как предполагается в ф-и EnumResourceTypes. Еще раз повторю, вместо адреса функции типа EnumTypesFunc, ты передаешь результат ее выполнения (BOOL). И что ты этим хотел сказать? Функцию перебора типов ресурсов вообще надо вызывать один раз, причем вот так:
-------------------- ... |
||||
|
|||||
AndreySol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Ну вообще-то я такой вариант ф-ции взял не с потолка, а из MSDN - или там неправы ?
По мессагам видно, что ресурс загружается и блокируется - значит имена все же правильные, почему тогда не удается загрузить через LoadIcon ? Это сообщение отредактировал(а) AndreySol - 20.7.2005, 06:53 |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Потому что LoadIcon загружает аппаратно независимые иконы, они находятся в другом разделе (RC_GROUP_ICON), а не в RC_ICON. Последнее - аппаратно-зависимые иконы, которые неведомо откуда берутся. Т.е. я загузила свое приложение, в котором точно нет никаких RC_ICON. А в списке ресурсов они есть - может, они по умолчанию всегда добавляются.
Что касается примера из MSDN, то не знаю, где вы это нашли. Да и в любом случае, его тоже люди пишут, могут и ошибиться. Думать нужно в любом случае. Это сообщение отредактировал(а) Earnest - 20.7.2005, 16:27 -------------------- ... |
|||
|
||||
AndreySol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Выдержка из MSDN:
А нашел в статье "Using Resources". Это сообщение отредактировал(а) AndreySol - 25.7.2005, 06:34 |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
И как из этой цитаты следует код, который ты написал?
Вот твой код:
Еще раз повторяю: это НЕПРАВИЛЬНО!!! В этой строке ты ВЫЗЫВАЕШЬ функцию, вместо того, чтобы передать ее АДРЕС. -------------------- ... |
|||
|
||||
AndreySol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Это из той же статьи из MSDN:
|
|||
|
||||
Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
AndreySol
![]() ![]() ![]() Это что, по твоему, одно и тоже?
и
Если ты работаешь программистом, сообщи адрес своего работодателя, напишу ему, чтобы немедленно тебя уволил. ![]() -------------------- ... |
||||
|
|||||
Pro100XAKEP |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 11.5.2012 Где: г. Одесса Репутация: нет Всего: нет |
Привет всем!!! Вот у меня такая проблема я пишу в среде DEV-C++ и у меня такая ошибка линковщика происходит от фунции EnumResourceNames(dll, RT_ICON, (ENUMRESNAMEPROC) EnumResNameProc, 0);
а вот что пишет DEV-C++: [Linker error] undefined reference to `_Z15EnumResNameProcPvPKcPcl@16' Кто подскажет в чём может быть проблема??? Заранее спасиба... |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Pro100XAKEP, создай новую тему, и не здесь, а в WinAPI.
-------------------- ... |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |