2012-06-20 1 views
0

У меня есть проект с несколькими значками, растровыми изображениями и строками, встроенными в DLL ресурсов в целях MUI. Все они отлично работают в Windows 7, но в XP работают только строки и растровые изображения. Я создаю приложение в Windows 7 с помощью VS2012, используя Visual Studio 2010 (v100) в качестве реального набора инструментов.Как совместно использовать DLL-ресурс, содержащий значки между Windows 7 и XP?

Поскольку MUI не поддерживается на основе XP, я программно получаю дескриптор соответствующей DLL ресурса на основе шагов 5.1c и 5.2 из this article on MSDN.

Результат GetLastError после того, как я попробую LoadImage для моего значка с моего ресурса на XP равен 1813, или ERROR_RESOURCE_TYPE_NOT_FOUND. Вызов LoadImage для растрового изображения или LoadString на одном и том же дескрипторе ресурса работает правильно, и действительно, мои строки и растровые изображения отображаются там, где это необходимо.

Что-то, что я заметил: если я попытаюсь установить значок для ярлыка, открыв DLL для своей прикладной программы, у Windows 7 нет проблем, но Windows XP сообщает, что файл не содержит значков. У XP нет проблем с загрузкой самих файлов ico, если я их скопирую, поэтому я не думаю, что они находятся в плохом формате, если только компилятор ресурсов каким-то образом их калечит. Если я посмотрю на значок в редакторе ресурсов, он выглядит как 32-разрядный BMP-файл 16x16, как и следовало ожидать.

ответ

1

Моя проблема была вызвана VS2012 как-то. Я не уверен, в чем разница между созданием библиотек ресурсов в VS2010 с инструментами VS2010 и их построением в VS2012 с инструментами VS2010, но есть один.

+0

Спасибо за сообщение объяснения. – arx

1

При создании MUI решения ваших ресурсы разделены между от языка DLL (который обычно содержат значки, манифесты и т.д.) и конкретного язык библиотеку DLL (которые обычно содержат строки, диалоги и т.д.)

От MSDN: «Функции загрузки ресурсов до Windows Vista (такие как LoadString, LoadIcon, LoadBitmap, FormatMessage и другие) не поддерживают MUI».

Ваши строки и значки не могут отображаться в одной DLL, и XP не захочет их искать. В статье, в которой я расскажу, объясняется, как заставить MUI работать в Windows XP.

+0

Они не осведомлены о MUI, но если вы передадите им дескриптор библиотеки, специфичной для языка, они все равно работают (я обновлю вопрос с дополнительной информацией о том, как я получаю этот дескриптор). Я проверил, что это работает, когда дело доходит до строк и растровых изображений. Это только значки (все из которых настроены как локальные), которые не отображаются. Я проверял, что помимо секций MUI и манифеста нет ресурсов в нейтральной для языка DLL или основной exe, поэтому загружается моя локальная DLL-библиотека, но что-то в разделе значков, что не так. –

+0

@MilesStrombach: достаточно справедливо. Как кодируются значки? В Windows Vista появилась поддержка значков, содержащих PNG-кодированные данные. Вы говорите, что файлы значков работают на XP, но, возможно, компилятор ресурсов сжимает их в PNG? Редактор ресурсов сообщает вам, в каком формате находятся значки в DLL? Если нет, откройте DLL в редакторе ресурсов, сохраните значок как .ico, откройте его в блокноте и посмотрите, содержит ли он буквы «PNG». – arx

+0

Я использовал пару различных экстракторов ресурсов, и все значки, которые они вытаскивают, выглядят как 32-битные BMP и не имеют заголовка PNG. –