MS VS2013 для XP
От: Vicul  
Дата: 15.10.17 07:56
Оценка:
Проапгредился на 2013 студию с 2012. Все прошло гладко, за исключением, что прога перестала запускаться на Win XP.

Что бы не заморачиваться со старым проектом, для пробы создал новый MFC диалоговый проект. В тулсете установил V120_xp,
Указал в его свойствах статическую сборку. После сборки программа не запускается на ХР.
Выдает — is not a valid Win32.
На депенсе определил, что прога ищет в kernel32.dll InitializeCriticalsectionEx(), которой нет. Правильно, откуда ей взяться в ХР!
Значит тулсет V120_xp в 2013 студии до лампочки? В VS2012 такой фигни не было.

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

Кто, что посоветует?
Re: MS VS2013 для XP
От: AlexGin Беларусь  
Дата: 15.10.17 09:47
Оценка:
Здравствуйте, 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.
Даже если вызов InitializeCriticalsectionEx() как-то "проглатывался" при компиляции и линковке на VS2012,
не факт что он успешно отработает на Win XP

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
Отредактировано 15.10.2017 9:56 AlexGin . Предыдущая версия . Еще …
Отредактировано 15.10.2017 9:52 AlexGin . Предыдущая версия .
Отредактировано 15.10.2017 9:50 AlexGin . Предыдущая версия .
Re: MS VS2013 для XP
От: kov_serg Россия  
Дата: 15.10.17 10:07
Оценка: 2 (1)
Здравствуйте, Vicul, Вы писали:

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


В VC2015 надо добавить ключ /D_USING_V110_SDK71_ /link /SUBSYSTEM:WINDOWS,5.01

Если быстро попробывать то есть архив 72Мб VC2015 +x64 mfc.src (распакуется в 750Мб). Устанавливается в течении 1мин
В директории usage пример использования. Он собирает для winxp
Отредактировано 15.10.2017 10:13 kov_serg . Предыдущая версия . Еще …
Отредактировано 15.10.2017 10:12 kov_serg . Предыдущая версия .
Re[2]: MS VS2013 для XP
От: Vicul  
Дата: 15.10.17 14:58
Оценка:
AG>Убирай её вызов из своего кода (или заменяй на InitializeCriticalsection) и всё будет OK!

если бы все так было просто.

в боевом проекте солюшен насчитывает более 30 проектов. А эта бяка вылезла на длл-ках с opencv, которую я сам собирал
на том же 2013 с v120-xp. А в солюшене opencv за сотню проектов. И все 42 длл-ки идут с вызовом InitializeCriticalsectionEx.

На тестовой проге, там она где то внутри. Я в визарде создал диалоговое окно МФС с двумя кнопками — ok и cancel.
Ну чтобы она только показывала это окно. Поэтому по любому должна запускаться на ХР.
Re[2]: MS VS2013 для XP
От: Vicul  
Дата: 15.10.17 14:59
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, Vicul, Вы писали:


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


_>В VC2015 надо добавить ключ /D_USING_V110_SDK71_ /link /SUBSYSTEM:WINDOWS,5.01


_>Если быстро попробывать то есть архив 72Мб VC2015 +x64 mfc.src (распакуется в 750Мб). Устанавливается в течении 1мин

_>В директории usage пример использования. Он собирает для winxp

У меня 2013. Но за наводку спасибо
Re[3]: MS VS2013 для XP
От: AlexGin Беларусь  
Дата: 15.10.17 18:33
Оценка: 3 (1)
Здравствуйте, Vicul, Вы писали:


AG>>Убирай её вызов из своего кода (или заменяй на InitializeCriticalsection) и всё будет OK!

V>если бы все так было просто.
OpenCV говоришь...
Занималсись мы довольно много на OpenCV, правда всё делали под Win-7.
Мы применяли OpenCV v 2.4 (она и по сей день доступна на https://sourceforge.net/projects/opencvlibrary ).
Попутно замечу, что никаких проблем в этом плане — ни с MFC, ни с Qt5 у нас НЕ БЫЛО (правда, всё под Win-7).

V>в боевом проекте солюшен насчитывает более 30 проектов. А эта бяка вылезла на длл-ках с opencv, которую я сам собирал

Ты собирал OpenCV v 3.3?
Если взять более раннюю версию OpenCV, совместимую с Win-XP (ту же OpenCV v 2.4)? Этот вариант реален?
Хотя бы, для поддержки Win-XP...

V>на том же 2013 с v120-xp.

То есть, сборка с вызовами InitializeCriticalsectionEx проходила под тулсет v120-xp?
Странно. Может быть, этот материал окажется актуален:
https://github.com/opencv/opencv/issues/9817

V>А в солюшене opencv за сотню проектов. И все 42 длл-ки идут с вызовом InitializeCriticalsectionEx.

То есть — вариант перехода но более старую библиотеку OpenCV — актуален. Не знаю, правда, возможно ли это по ТЗ в твоём случае.

V>На тестовой проге, там она где то внутри. Я в визарде создал диалоговое окно МФС с двумя кнопками — ok и cancel.

V>Ну чтобы она только показывала это окно. Поэтому по любому должна запускаться на ХР.
Sorry, не распарсил последние две строки — зачем "диалоговое окно МФС с двумя кнопками — ok и cancel"??? Суть этого действия???
Заменил вызов InitializeCriticalsection на что-то другое?
Или я здесь что-то не так понял?

Имея исходники, я бы всё-же попытался вызывать InitializeCriticalsection, вместо InitializeCriticalsectionEx.
Конечно, для этого потребуются некоторые изменения в существующих кодах...
Или же применнеие более ранней библиотеки OpenCV v 2.4.
Отредактировано 15.10.2017 18:53 AlexGin . Предыдущая версия . Еще …
Отредактировано 15.10.2017 18:48 AlexGin . Предыдущая версия .
Отредактировано 15.10.2017 18:41 AlexGin . Предыдущая версия .
Re[4]: MS VS2013 для XP
От: AlexGin Беларусь  
Дата: 15.10.17 19:06
Оценка:
V>>в боевом проекте солюшен насчитывает более 30 проектов. А эта бяка вылезла на длл-ках с opencv, которую я сам собирал
AG>Ты собирал OpenCV v 3.3?
Кстати — возможен вариант, что сборка OpenCV v 3.3, производимая через CMake,
применяет те или иные опции, запрещенные для Win-XP?
Отредактировано 15.10.2017 19:08 AlexGin . Предыдущая версия .
Re[3]: MS VS2013 для XP
От: kov_serg Россия  
Дата: 15.10.17 19:07
Оценка:
Здравствуйте, Vicul, Вы писали:

V>Здравствуйте, kov_serg, Вы писали:


_>>Здравствуйте, Vicul, Вы писали:


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


_>>В VC2015 надо добавить ключ /D_USING_V110_SDK71_ /link /SUBSYSTEM:WINDOWS,5.01


_>>Если быстро попробывать то есть архив 72Мб VC2015 +x64 mfc.src (распакуется в 750Мб). Устанавливается в течении 1мин

_>>В директории usage пример использования. Он собирает для winxp

V>У меня 2013. Но за наводку спасибо

Хз у меня сечас нету 2013-он ни на одной из машин. Но думаю что примерно так же как и в 2015.

https://tedwvc.wordpress.com/2014/01/01/how-to-target-xp-with-vc2012-or-vc2013-and-continue-to-use-the-windows-8-x-sdk/
Re[4]: MS VS2013 для XP
От: Vicul  
Дата: 16.10.17 05:42
Оценка:
AG>Sorry, не распарсил последние две строки — зачем "диалоговое окно МФС с двумя кнопками — ok и cancel"??? Суть этого действия???

Что бы проверить работает ли опция тулсет v120-xp на 2013 вооще. Результаты показали — не работает. Поэтому пока смысла лесть в opencv
не вижу.


Отвечаю на вопрос, как собиралась opencv — последняя версия 3.3.0, конфигурилась на CMake, опция v120-x была установлена и появилась на всех проектах
opencv, билдилась на 2013.
Re: MS VS2013 для XP
От: _NN_ www.nemerleweb.com
Дата: 16.10.17 09:35
Оценка:
Здравствуйте, Vicul, Вы писали:

К сожалению под рукой нет 2013.
Проверил в 2017 режим vc141_xp , получил бинарник без InitializeCriticalsection.

Возможно есть вариант обновить компилятор ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: MS VS2013 для XP
От: AlexGin Беларусь  
Дата: 16.10.17 10:30
Оценка:
Здравствуйте, Vicul, Вы писали:

V>

V>Что бы проверить работает ли опция тулсет v120-xp на 2013 вооще. Результаты показали — не работает. Поэтому пока смысла лесть в opencv
V>не вижу.

1) Опция v120-xp на MSVC-2013 Update 5 работает.
Простое диалоговое приложение — собирается, запускается (пробовал под Win-7, сейчас нет под рукой возможности запустить на Win-XP).
Ранее, пару лет назад, портирование на MSVC-2013 (v120-xp) я провёл для продукта, разработанного тогда мною,
на старой работе: http://www.ensytech.com/sistemnye_resheniya/pak_titan_-vodosnabzhenie (MFC, в солюшене несколько десятков проектов).
Тогда всё успешно проверялось в работе под XP.

2) Для MSVC-2013, если приложение использует не Unicode, следует скачать специальный пакет поддержки MFC MBCS:
https://www.microsoft.com/en-us/download/details.aspx?id=40770
Вполне возможно, что здесь (в данном случае) — это актуально.

3) Какая версия Windows SDK установлена у тебя на компе?
Это также может быть проблемой:
https://stackoverflow.com/questions/27867969/visual-studio-2013-sdkddkver-h-and-related-errors

4) Файл targetver.h в проекте — посмотри что в нём...
Отредактировано 16.10.2017 10:33 AlexGin . Предыдущая версия .
Re: MS VS2013 для XP
От: Vicul  
Дата: 16.10.17 15:08
Оценка:
V>Кто, что посоветует?


Отвечу здесь всем,

1. Работает ли тулсет v120-xp на 2013?

Работает, я сделал тестовое консольное приложение, типа Hello World.

ОС на переключение тулсета реагирует, значит все — ок.

2. Почему тулсет не отрабатывал тестовое MFC приложение.

До конца не разобрался — просто если создавать с нуля mfc окно, оно создается без поддержки ХР.
Но во всех прогах, которые я проапгредил с 2012, тулсет срабатывал. Будет время докапаюсь и до этого.

3. Почему Opencv 3.3.0 не работает на XP.

Не будет работать.

https://github.com/opencv/opencv/issues/9817

Там открытым текстом они написали — что эта проблема есть и фиксить ее они не собираются.

Пришлось откатыватся на opencv 2.4.6, надеюсь зафиксить это в следующей версии моей проги, в которой не будет ХР.

Все спасибо за помощь
Re[2]: MS VS2013 для XP
От: _NN_ www.nemerleweb.com
Дата: 16.10.17 18:56
Оценка:
Здравствуйте, Vicul, Вы писали:

V>Пришлось откатыватся на opencv 2.4.6, надеюсь зафиксить это в следующей версии моей проги, в которой не будет ХР.


В коде opencv только в cap_msmf.hpp используется InitializeCriticalSectionEx без #if-#else.

Если XP нужна то можно добавить по аналогии с остальными и попробовать собрать.
Будет работать, протолкнуть изменение в официальный репозиторий.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.