Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Программа не поддерживает темы Windows XP. Для чего нужен манифест в программе.


Автор: zkv 18.9.2007, 01:07
Программа не поддерживает темы Windows XP.

Проблема в том, что у вас либо не "прикреплен" файл манифеста, либо он игнорируется из-за настроек юникода в проекте (касается VS2005).


Как прилинковать манифест

Манифест действительно нужен для поддержки XP стиля стандартными контролами(если XP стиль включен в системе). Скажу больше, его можно спокойно прилинковать к прочим ресурсам программы, для этого достаточно в файл ресурсов добавить такую строку:

Код

1 24 DISCARDABLE "your_manifest_file.xml"


А в программе перед созданием диалога не забыть вызвать:

Код

InitCommonControls();


Хотя это не всегда нужно, но чтобы уж наверняка...

Добавлено @ 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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)