| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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*! Заменил
и ошибка исчезла! А Windows 2000 Compatibility Mode видимо как-то нивелировал это косяк. |