NTDDI_VERSION设置与_WIN32_WINNT设置冲突

use*_*361 4 c++ windows winapi

使用VS2010我有这个错误:

error C1189: #error :  NTDDI_VERSION setting conflicts with _WIN32_WINNT setting
Run Code Online (Sandbox Code Playgroud)

在StdAfx.h中使用:

#define _WIN32_WINNT 0x0502 
Run Code Online (Sandbox Code Playgroud)

在我的其他来源my.cpp我使用:

#define NTDDI_VERSION 0x06000000 
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

Dav*_*nan 8

#define NTDDI_VERSION 0x06000000 
Run Code Online (Sandbox Code Playgroud)

那就是Vista.

#define _WIN32_WINNT 0x0502 
Run Code Online (Sandbox Code Playgroud)

那是Server 2003.

所以这些版本确实存在冲突.如果你想支持Vista及以上,你需要:

#define NTDDI_VERSION 0x06000000 
#define _WIN32_WINNT 0x0600 
Run Code Online (Sandbox Code Playgroud)

如果您想要Server 2003及更高版本,那么您可以使用:

#define NTDDI_VERSION 0x05020000
#define _WIN32_WINNT 0x0502 
Run Code Online (Sandbox Code Playgroud)

请注意,NTDDI_VERSIONdefine还可以指定Service Pack.因此,如果您想要Vista SP1及以上版本,那么您可以使用:

#define NTDDI_VERSION 0x06000100 
#define _WIN32_WINNT 0x0600 
Run Code Online (Sandbox Code Playgroud)

作为一般规则,您希望将这些定义设置为与您希望支持的最小版本对应的值.

而不是使用这些魔术常量,你应该写,例如:

#define NTDDI_VERSION NTDDI_VISTA 
#define _WIN32_WINNT _WIN32_WINNT_VISTA 
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅MSDN:使用Windows标头.