_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
在编译期间,此错误不断弹出。它似乎不会影响编译,但我应该如何摆脱它?我是否会因忽视它而冒任何风险?
答案 0 :(得分:16)
它是通过WinSDKVer.h为您定义的。因此,只需在源代码的顶部明确定义它(例如在stdafx.h的开头),就可以消除警告。
将它定义为相同的值(与WinSDKVer.h中的_WIN32_WINNT_MAXVER
相比)极不可能破坏任何内容。
例如,用于Windows 7和.NET Framework 3.5 Service Pack 1的Windows®软件开发工具包(SDK)的WinSDKVer.h包含:
// This list contains the highest version constants supported by content
// in the Windows SDK.
// [...]
#define _WIN32_WINNT_MAXVER 0x0601
答案 1 :(得分:16)
将其设置为您希望程序运行的最旧的Windows操作系统。 可能的值在此MSDN文章Using the Windows Headers中给出。
您可以在每个符号中使用
#define
语句来定义这些符号 源文件,或指定支持的/D
编译器选项 Visual C ++。例如,要在源文件中设置
WINVER
,请使用 以下声明:#define WINVER 0x0502 // Windows Server 2003 with SP1, Windows XP with SP2
要在源文件中设置
_WIN32_WINNT
,请使用以下语句:#define _WIN32_WINNT 0x0502 // Windows Server 2003 with SP1, Windows XP with SP2
要使用
_WIN32_WINNT
编译器选项设置/D
,请使用以下命令:cl -c /D_WIN32_WINNT=0x0502 source.cpp
答案 2 :(得分:1)
注意:#define _WIN32_WINNT
必须在 任何头文件之前发生,包括“stdafx.h”。
答案 3 :(得分:0)
要解决这个问题,可以在我用来解决问题的user93353的超级答案中找到指向可能使用的值的链接。
https://stackoverflow.com/a/12871547/3070485
但是,在阅读解决方案之后,我在我的IDE(Visual Studio 2019)中设置了编译器选项。
对于任何想要在此处快速设置它并想要知道位置的人(由于这些特性在IDE发行版之间会发生变化,或者某个人可能更熟悉另一个IDE),就在这里。
配置属性
C / C ++
预处理器
预处理程序定义
_WIN32_WINNT = 0x0502
答案 4 :(得分:0)
#define _WIN32_WINNT
和#define WINVER
可以出现在标题中,只要它们出现在包括SDKDDKVer.h
或Windows SDK中的任何标题(特别是{ {1}})。 Visual Studio VC ++项目通常提供一个Windows.h
标头,您可以在其中包含targetver.h
,定义WinSDKVer.h
,_WIN32_WINNT
和NTDDI_VERSION
,然后包含{{1} }。该文件中的评论说:
WINVER
Microsoft文章Update WINVER and _WIN32_WINNT完全指导您在SDKDDKVer.h
中定义// 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`.
和_WIN32_WINNT
(尽管其中提到可以使用命令行来定义)参数)。
注意:WINVER
被包含在Visual Studio生成的某些targetver.h
资源文件中,因此这是如上所述填充targetver.h
文件内容的另一个原因。 / p>
注意:在项目的构建配置中使用命令行参数或预处理程序指令来定义.rc
,targetver.h
和_WIN32_WINNT
也是可以的,但都不能满足于包含{ {1}}和NTDDI_VERSION
。
注意:使用Windows 8.1 SDK(或更高版本)时,您可能还需要根据特定的Windows平台(服务器,台式机,电话,商店等)在WINVER
中定义WinSDKVer.h
。 ) 你需要。有关详细信息,请参见SDKDDKVer.h
。
注意:在较新的Windows SDK版本中,可以根据您为WINAPI_FAMILY
定义的值来自动设置值targetver.h
,winapifamily.h
和NTDDI_VERSION
。但是,您可能想要在包含WINVER
之前为_WIN32_IE
定义一个更特定的版本。
答案 5 :(得分:0)
如果使用MFC :我的首选答案是包括windows.h。但是,如果您使用的是MFC,则无法执行此操作*。为了避免在项目中定义WINVER,可以在afx.h之前包含sdkddkver.h。
#include <sdkddkver.h>
#include <afx.h>
sdkddkver系统标头设置WINVER和_WIN32_WINNT,因此您无需将其添加到项目中。这与从系统标头对Windows SDK / DDK进行版本控制的windows.h一样。
*如果在afx.h之前包含windows.h,则会得到:#error: WINDOWS.H already included. MFC apps must not #include <Windows.h>