MFC не поддерживает WINVER меньше 0x0501

У меня есть проект на С++, который ссылается на многие другие проекты/библиотеки. Это приложение, созданное много лет назад. Каждый раз в год он обновляется, и делается новая версия. Я использовал Visual Studio 6 для обновления и создания новых версий этого приложения уже без каких-либо проблем.

Я пытаюсь переключиться на Visual Studio 10 (и теперь VS2013). Первоначально я столкнулся с несколькими предупреждениями и ошибками, связанными с проблемами совместимости между версиями VS. Я смог позаботиться о большинстве. Однако меня все еще несколько смущает следующая ошибка:

error C1189: #error : MFC does not support WINVER less than 0x0501. Please change the definition of WINVER in your project properties or precompiled header. C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxv_w32.h

Ошибка возникает в некоторых из библиотек проектов, на которые ссылаются. Я проверил соответствующие библиотеки проектов, и я не могу найти ссылку на WINVER.

Я искал в Интернете информацию об этом и нашел несколько тем, но ничего, что характерно для моей проблемы. Может кто-то пролить свет на то, что может происходить здесь?

Спасибо заранее. LA

Ответ 1

Все приложения MFC определяют значение макроса WINVER где-то, если вы не определили его самостоятельно. Я предполагаю, что MS удалило определение по умолчанию в своих собственных файлах заголовков и теперь делает обязательным, чтобы вы явно определяли его.

Итак, чтобы решить вашу проблему, поместите #define в параметры компилятора "препроцессор" или вверху вашего предварительно скомпилированного заголовка (например, stdafx.h).

Примечание 0x501 - поддержка Windows XP. 0x600 - это Vista, 0x601 - это Windows 7 - и как мне грустно вспоминать об этом!

Ответ 2

У меня такая же ошибка, в Windows 7 с Visual Studio 2013.

В моем случае у моего проекта был исходный файл с именем stdafx.h, внутри которого был

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif

Я изменил его на

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x601
#endif

и ошибка исчезла.

Ответ 3

Удалите определенную версию win "WINVER = 0x0500" из Свойства конфигурации → c/c++ → вкладка препроцессора.

Или вы можете предоставить более высокую WIN WINERSION как #define _WIN32_WINNT 0x601 в своем коде, где бы вы ни получали ошибку.

Ответ 4

Я получил ту же ошибку, на WIN 7 VS 2013. В моем случае у моего проекта был исходный файл с именем stdafx.h, внутри этого файла был

#ifndef WINVER
#define WINVER 0x0400
#endif

Я изменил его на

#ifndef WINVER
#define WINVER 0x601
#endif

и ошибка исчезла.