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
и ошибка исчезла.