'_WIN32_WINNT'/'WINVER':宏重定义
问题描述:
我有一个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'
答
因为#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>
你不需要直接'#定义_WIN32_WINNT” - 简单地删除这个 – RbMm
或添加这一行'#define _CHICAGO_' – RbMm
请看一下targetver.h,按照指示操作。 –