Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > Windows 2000 Compatibility Mode


Автор: ksili 24.3.2009, 07:15
В свойствах запускаемого файла в Win XP можно поставить режим совместимости с какой-нибудь из предыдущих версий винды. Мне интересно что именно при этом изменяется? 
Насколько я понимаю, несколько изменялось API от одной версии винды к другой, и программа, написанная для более старой версии отправляет запросы в Windows API по-старому. Установка режима совместимости помогает это учесть. Но мне интересно, что именно ещё при этом происходит?

Данный вопрос родился из следующей проблемы: программа на С++ пишется в Windows XP (русской), у заказчика она в Windows XP (английской) не запускается (ошибка при запуске) пока не включишь режим совместимости в Windows 2000. И у меня и у заказчика винда с третьим сервис-паком. Не могу понять из-за чего программа так ведёт себя у заказчика...

Добавлено через 7 минут и 52 секунды
У меня она в WinXP запускается

Автор: ksili 26.3.2009, 08:15
Выяснил ещё, что в разных версиях винды менялась структура реестра. Но у меня с реестром прога не работает, так что дело не в этом.

А вот другая мысль, похоже оказалась верной. Насколько я понимаю в  Win XP по-умолчанию используются юникодные версии API-функций. В Win2000 не знаю, но видимо там наоборот. В том месте, где происходило исключение я нашёл функцию с двумя строковыми параметрами. Один был указан явно - со спецификатором L: L"...", а второй был переменной с приведением к типу const char*! Заменил 
Код

(const char*)peremennaya
 на 
Код

(LPCTSTR)peremennaya
 
и ошибка исчезла!

А Windows 2000 Compatibility Mode видимо как-то нивелировал это косяк.

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