2016-12-29 11 views
1

У меня есть проект VS2015 C++. приложение должно работать как на Windows 7, так и на XP. Итак, я хочу установить _WIN32_WINNT & WINVER на _WIN32_WINNT_WINXP.'_WIN32_WINNT'/'WINVER': переопределение макросов

Это как stdafx.h моего проекта выглядит следующим образом:

stdafx.h

#pragma once 

#include "targetver.h" 

#define _WIN32_WINNT  _WIN32_WINNT_WINXP   
#define WINVER    _WIN32_WINNT_WINXP 

#include <WinSDKVer.h> 

// Windows Header Files: 
#include <windows.h> 

При компиляции, я вижу следующее предупреждение/ошибка:

stdafx.h(12): error C2220: warning treated as error - no 'object' file generated 
1>stdafx.h(12): warning C4005: '_WIN32_WINNT': macro redefinition 
1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\SDKDDKVer.h(197): note: see previous definition of '_WIN32_WINNT' 
1>stdafx.h(13): warning C4005: 'WINVER': macro redefinition 
1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\SDKDDKVer.h(212): note: see previous definition of 'WINVER' 
+0

вам не нужен прямой '#define _WIN32_WINNT» - просто удалите этот – RbMm

+0

или добавьте эту строку '#define _CHICAGO_' – RbMm

+1

Посмотрите на targetver.h, следуйте инструкциям. –

ответ

2

Поскольку #include "targetver.h" содержит <sdkddkver.h>, который уже определяет константы _WIN32_WINNT и WINVER, когда они еще не определены средой сборки.

В самом деле, автоматически сгенерированный targetver.h говорит вам точно, как это исправить:

#pragma once 

// Including SDKDDKVer.h defines the highest available Windows platform. 

// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 

#include <SDKDDKVer.h> 

Простое решение. Просто определите эти константы перед включением targetver.h. Вы, возможно, придется использовать фактическое буквальное значение для XP, так как вы не заголовочный файл, который определяет

Как это:

// x501 is XP 
#define _WIN32_WINNT  0x0501   
#define WINVER    0x0501 

#include "targetver.h" 
#include <windows.h> 
+2

Есть ли решение, использующее имена типа _WIN32_WINNT_WINXP вместо числовых констант, таких как 0x0501? – Liviu

+0

@ Liviu - все, что вам нужно, находится в '' – selbie

+2

да, но я должен определить '_WIN32_WINNT' перед включением' ', не так ли? И принять предупреждение 'C4005: '_WIN32_WINNT': macro redefinition' – Liviu

 Смежные вопросы

  • Нет связанных вопросов^_^