Модераторы: bartram, Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Windows 2000 Compatibility Mode, Что конкретно меняется? 
V
    Опции темы
ksili
Дата 24.3.2009, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



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

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

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


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
ksili
Дата 26.3.2009, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



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

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

(const char*)peremennaya
 на 
Код

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

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


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Windows"
December
bartram
Akella

Запрещается!

1. Обсуждать взлом и делиться кряками

2. Способствовать созданию и распространению вирусов

  • Для бессмертных бородатых вопросов типа Win vs Nix есть специальный форум Религиозные Войны
  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • ВСЕГДА УКАЗЫВАЙТЕ ВЕРСИЮ ОС

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Windows | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.