Проблемы со сборкой после обновления приложения с vs2005 до vs2012

Мне нужно обновить мое приложение с Visual Studio 2005 IDE до Visual Studio 2012. Мастер обновления успешно преобразует файлы решения и проекта с 0 ошибками и несколькими предупреждениями.

Но когда я начинаю создавать приложение, я получаю сообщение об ошибке:

error C1189: #error: Этот файл требует, чтобы _WIN32_WINNT был # определен как минимум до 0x0403. Рекомендуется значение 0x0501 или выше. в atlcore.h!

Я попытался изменить версию no на 0x0500, 0x0501, 0x0502, а также на 0x0601 (как через параметр компилятора / D, так и вручную изменяя в atlcore.h, WINVER также изменяется.), Но не повезло. отображается та же ошибка.

Где я ошибаюсь?


person Anantha Subramaniam    schedule 02.11.2012    source источник
comment
atlcore.h - системный файл, менять его не следует!   -  person vikky    schedule 02.11.2012


Ответы (3)


Visual C ++ больше не поддерживает Windows 95, Windows 98, Windows ME или Windows NT. Если ваши макросы WINVER или _WIN32_WINNT назначены одной из этих версий Windows, вы должны изменить макросы.

Чтобы изменить макросы, добавьте в файл заголовка следующие строки.

#define WINVER 0x0500
#define _WIN32_WINNT 0x0500

РЕДАКТИРОВАТЬ:

WINVER определяет минимальный SDK платформы, необходимый для создания вашего приложения, который, в свою очередь, будет определять во время компиляции, какие подпрограммы обнаруживаются в заголовках.

#define _WIN32_WINNT_NT4     0x0400
#define _WIN32_WINNT_WIN2K     0x0500
#define _WIN32_WINNT_WINXP     0x0501
#define _WIN32_WINNT_WS03     0x0502
#define _WIN32_WINNT_WIN6     0x0600
#define _WIN32_WINNT_VISTA     0x0600
#define _WIN32_WINNT_WS08     0x0600
#define _WIN32_WINNT_LONGHORN    0x0600
#define _WIN32_WINNT_WIN7     0x0601

Другое решение:

Если вы установили WIndows SDK на свой компьютер (в / Microsoft SDK / Windows), вы можете #include в stdafx.h (или в заголовок, который вы включаете во все ваши файлы C ++). Включение SDKDDKVer.h будет нацелено на самую высокую доступную версию Windows.

Надеюсь, это сработает !!!!!

Для получения дополнительной информации СМОТРЕТЬ ЗДЕСЬ

person vikky    schedule 02.11.2012
comment
Как было предложено, я попытался разместить в stdafx.h (это приводит к той же ошибке), если я помещаю то же самое в atlcore.h (я получаю предупреждение как переопределение winver для каждого n каждого файла), но на этот раз я получаю другие ошибки. если размещение в atlcore.h является правильным методом устранения предупреждения. - person Anantha Subramaniam; 02.11.2012
comment
c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ atlmfc \ include \ atlcore.h (34): предупреждение C4005: 'WINVER': переопределение макроса 1 ›c: \ program files (x86) \ windows kits \ 8.0 \ include \ shared \ sdkddkver.h (211): см. Предыдущее определение «WINVER» 1 ›c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ atlmfc \ include \ atlcore.h (35): предупреждение C4005: '_WIN32_WINNT': переопределение макроса 1 ›e: \ repository \ mycomputer \ source \ native \ application \ agent \ include \ stdafx.h (20): см. Предыдущее определение '_WIN32_WINNT' - person Anantha Subramaniam; 02.11.2012
comment
Сообщение об ошибке то же самое, что бы я ни делал. Тем не менее, спасибо за указатели. Нужно исследовать больше. - person Anantha Subramaniam; 02.11.2012
comment
проблема временно решена путем комментирования чека в atlcore.h - person Anantha Subramaniam; 02.11.2012

Проблема временно решена путем комментирования чека в atlcore.h:

если _WIN32_WINNT ›0x0501

// # ошибка Этот файл требует, чтобы _WIN32_WINNT был # определен как минимум до 0x0403. Рекомендуется значение 0x0501 или выше.

endif

Я знаю, что это неправильный способ [редактировать файл, отправленный IDE], но сделал это, так как это может быть связано с неправильной установкой.

Если кто-нибудь столкнется с постоянным исправлением, дайте мне знать.

person Anantha Subramaniam    schedule 02.11.2012

вы можете добавить директиву препроцессора для проекта в настройках проекта, C / C ++, определениях препроцессора, добавив WINVER = 0x0501;

(вы также можете отменить определение)

Мне интересно, используете ли вы предварительно скомпилированные заголовки, которые перезаписывают изменения в stdafx.h, это способ убедиться, что это установлено

Эта настройка препроцессора сохраняется до тех пор, пока код в файлах проекта не изменит ее, после чего, если это не решит проблему, вы должны выяснить, как и где это устанавливается / не устанавливается / проверяется; но решения не должны включать никаких изменений в файлы Windows SDK

person Maiakaat    schedule 04.06.2014