Re[2]: Побочный эффект VerQueryValue
От: Аноним  
Дата: 29.08.05 19:48
Оценка:
Здравствуйте, Denn, Вы писали:

D>Здравствуйте, Deff, Вы писали:


D>>недавно столкнулся с интересной проблемой: секция ресурсов моего exe-файла (в силу специфики задачи) содержит два экземпляра RT_VERSION, один из которых имеет стандартный идентификатор 1, а второй имеет строковое название PROD_DATA. Работать с GetFileVersionInfoSize, GetFileVersionInfo возможно только для ресурса 1, а

D>>PROD_DATA нужно обрабатывать с помощью функций работы с ресурсами.
D>>Работаю по схеме
D>>FindResource -> LoadResource -> LockResource. Размер получаю с помощью SizeofResource.

D> В MSDN это запрещено, явно требуют использовать GetFileVersionInfoSize, ...


Мне не попадался подобный запрет. Более того, не вижу его причины (объяснимой). Мне это видится просто как API разного уровня. И ограничение, что версия, с которой можно работать версионным API, должна иметь ID = спец.константа (== 1) мне непонятно.

D>>Все благополучно, пока не начнется работа с VerQueryValue.

D>>Использование VerQueryValue с указателем от LockResource приведет к исключению ACCESS_VIOLATION.
D> Причем программа попытается вернуться после обработки обработчика catch(...) в код после вызова VerQueryValue. Бессовестно давит исключение..

D>>Интересно, если кто сталкивался с этой проблемой — как она решалась, и если подобным образом, как вычислялся необходимый минимальный размер буфера.

D> Отказались от этой затеи, грязный хак ничего хорошего не даст. Но тем не менее, не вижу смысла минимизировать размер буфера, чем больше запас, тем больше шансов, на "выживание", в разных версиях Windows
D>размеры структур могут и поменяться.

затея не очень, однако что делать в случае, если по задумке (пусть и спорной) требуется работать с exe-файлами в которых несколько ресурсов типа версии с различными ID?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.