Информация об изменениях

Сообщение Re: MS VS2013 для XP от 15.10.2017 9:47

Изменено 15.10.2017 9:52 AlexGin

Re: MS VS2013 для XP
Здравствуйте, Vicul, Вы писали:

V>Проапгредился на 2013 студию с 2012. Все прошло гладко, за исключением, что прога перестала запускаться на Win XP.


V>Что бы не заморачиваться со старым проектом, для пробы создал новый MFC диалоговый проект. В тулсете установил V120_xp,

V>Указал в его свойствах статическую сборку. После сборки программа не запускается на ХР.
V>Выдает — is not a valid Win32.
V>На депенсе определил, что прога ищет в kernel32.dll InitializeCriticalsectionEx(), которой нет. Правильно, откуда ей взяться в ХР!
Вообще-то всё вполне логично: функция InitializeCriticalsectionEx() начала поддерживаться от Windows Vista.
Убирай её вызов из своего кода (или заменяй на InitializeCriticalsection) и всё будет OK!
Вот подробности: https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms683477(v=vs.85).aspx

V>Значит тулсет V120_xp в 2013 студии до лампочки?

Нет, это не так. В этом плане — всё выставлено правильно.

В VS2012 такой фигни не было.
В этом смысле не подскажу, я пользовался VS2013 и VS2015

V>У меня стоит VS2013 Ultimate Update 5. Прогу собирал на 10 винде.

Предполагаю, что сборка на любой современной (от Windows-7 и новее) ОС даст аналогичный результат.

V>Кто, что посоветует?

Ввести некоторый флаг препроцессора (для условной компиляции), который определяет — будет старая винда или нет.
Примерно так:
#ifdef USE_OLD_WIN_XP // If use OLD Windows (Windows XP):
    // Делаем то, что ГАРАНТИРОВАННО поддерживается на Windows XP
    ...
#else // If use contemporary Windows:
    // Делаем то, что поддерживается на современных Windows
#endif
Re: MS VS2013 для XP
Здравствуйте, Vicul, Вы писали:

V>Проапгредился на 2013 студию с 2012. Все прошло гладко, за исключением, что прога перестала запускаться на Win XP.


V>Что бы не заморачиваться со старым проектом, для пробы создал новый MFC диалоговый проект. В тулсете установил V120_xp,

V>Указал в его свойствах статическую сборку. После сборки программа не запускается на ХР.
V>Выдает — is not a valid Win32.
V>На депенсе определил, что прога ищет в kernel32.dll InitializeCriticalsectionEx(), которой нет. Правильно, откуда ей взяться в ХР!
Вообще-то всё вполне логично: функция InitializeCriticalsectionEx() начала поддерживаться от Windows Vista.
Убирай её вызов из своего кода (или заменяй на InitializeCriticalsection) и всё будет OK!
Вот подробности: https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms683477(v=vs.85).aspx

V>Значит тулсет V120_xp в 2013 студии до лампочки?

Нет, это не так. В этом плане — всё выставлено правильно.

V>В VS2012 такой фигни не было.

В этом смысле не подскажу, я пользовался VS2013 и VS2015

V>У меня стоит VS2013 Ultimate Update 5. Прогу собирал на 10 винде.

Предполагаю, что сборка на любой современной (от Windows-7 и новее) ОС даст аналогичный результат.

V>Кто, что посоветует?

Ввести некоторый флаг препроцессора (для условной компиляции), который определяет — будет старая винда или нет.
Примерно так:
#ifdef USE_OLD_WIN_XP // If use OLD Windows (Windows XP):
    // Делаем то, что ГАРАНТИРОВАННО поддерживается на Windows XP
    ...
#else // If use contemporary Windows:
    // Делаем то, что поддерживается на современных Windows
#endif