Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > Программа не поддерживает темы Windows XP. Для чего нужен манифест в программе. |
Автор: zkv 18.9.2007, 01:07 | ||||
Программа не поддерживает темы Windows XP. Проблема в том, что у вас либо не "прикреплен" файл манифеста, либо он игнорируется из-за настроек юникода в проекте (касается VS2005). Как прилинковать манифест Манифест действительно нужен для поддержки XP стиля стандартными контролами(если XP стиль включен в системе). Скажу больше, его можно спокойно прилинковать к прочим ресурсам программы, для этого достаточно в файл ресурсов добавить такую строку:
А в программе перед созданием диалога не забыть вызвать:
Хотя это не всегда нужно, но чтобы уж наверняка... Добавлено @ 14:34 http://bobjohnson.nm.ru/inf/xp_style.html Автор: http://vingrad.ru/@W4FhLF Источник: http://forum.vingrad.ru/index.php?show_type=forum&showtopic=129863 Манифест и юникод Насчёт визуальных стилей. Официально commctl32.dll версий 6 (ну и выше - когда будут) анси-версии своих функций не поддерживает. Точнее не обязана поддерживать. Как пишет МС - в текущих виндах commctl32.dll (шестой версии, т. е. та, что в WinSxS, в system32 - 5-ой) анси-версии поддерживает. Но сие гарантировать МС не собирается. То есть любой win-fix, любой апдейт теоретически может заменить вашу commctl32.dll на чисто юникодную версию. Отсюда соответствующие директивы в недрах CRT. То есть все новые приложения должны юзать юникод-версии ВинАПИ функций. Иначе работоспособность полученных приожений в новых версиях винды МС не гарантируется (то есть просто в один прекрасный день при запуске приложения увидим, что точка входа для какой-нибудь анси-функции вин-апи не найдена). Автор: http://vingrad.ru/@Любитель Источник: http://forum.vingrad.ru/index.php?show_type=forum&showtopic=150120 Для чего нужен манифест в программе. Не совем верно думать, что поддержка XP стилей - цель манифеста, хотя для большинства он больше нихачем и не нужен. Вообще в XP появилась очередная попытка борьбы с DLL Hell. Она заключается в появлении папки WinSxS. В ней находятся папки различных библиотек, название папочек включают архитектуру системы (x86, x64), название (MS рекомендует всобачивать сюды имя фирмы или девелопера), версию и хеш-код сертификата безопасности библиотеки. Для загрузки библиотек из этой папочки используются манифесты. При этом функции DLL обычным образом также пишутся в таблицу экспорта - то есть не на XP (или на XP при отсутствии манифеста) произойдёт загрузка этих DLL обычным способом. XP (и >) будет загружать либы из WinSxS с проверкой компатибилити версий. В манифесте указывается какая версия нам нужна. Если такой нет, но есть обратносовместимая с ней - то будет загружена она. comctl32.dll 5-ой версии есть в System32. Это либа содержит функции работы (в том числе отрисовки) с основными контролами (как принято называть элементы у правления в винде). 5-ая версия не поддерживает XP-стили. 6-ая версия грузится через манифесты. Приоритет всегда у файл-манифеста - типа my_program.exe.manifest в папке с программой. Но можно засунуть и в ресурсы. Автор: http://vingrad.ru/@Любитель Источник: http://forum.vingrad.ru/index.php?show_type=&showtopic= Лоадер экзешников в XP и >, если есть либа в манифесте, он грузит её по технологии манифестов. PATH не при чём. Проверяется: 1. %WinDir%\WinSxS\manifests\<архитектура>_<имя_либы>_<hash-ключ>.manifest. И в той же папочки *.cat файл (сертификат безопасности). Хеш-ключ берётся по данным этого сертификата (конкретный алгоритм не знаю). Если сей манифест находится, то длл-ки берутся из папочки %WinDir%\WinSxS\<имя_манифеста_(см._выше)> Если там ничего не находится, то далее идут прайват-сборки: 2. <app_dir>\<library_name>.manifest => длл-ки берутся из папки с экзехой. Если и здесь неудача, то: 3. <app_dir>\<library_name>\<library_name>.manifest => из <app_dir>\<library_name> Автор: http://vingrad.ru/@Любитель Источник: http://forum.vingrad.ru/index.php?show_type=forum&showtopic=150120 Сссылки по теме http://www.codeproject.com/cpp/vcredists_x86.asp http://msdn2.microsoft.com/en-us/library/ms235299(VS.80).aspx Potential run-time errors Первая строка Еще по теме манифестов http://msdn2.microsoft.com/en-us/library/ms235624(VS.80).aspx http://msdn2.microsoft.com/en-us/library/aa374224.aspx Автор: http://vingrad.ru/@dizzy1984 Источник: http://forum.vingrad.ru/index.php?show_type=forum&showtopic=150120 |