目录:
引言
_WIN32_WINNT
WIN32_IE
WINVER简介
_MSC_VER
WINSDK 、WINDDK
下载
引言:
1.通过修改Windows定义的宏_WIN32_WINNT值,支持高版本中暂时摈弃的含有危害安全软件开发的函数声明。
_WIN32_WINNT
修改_WIN32_WINNT宏,说明详情如下:
在targetver.h文件中
#pragma once
// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。#include <SDKDDKVer.h>
引用#include <SDKDDKVer.h>,再加入相对应的平台宏定义值;就可以正常使用了。
//在头文件(例如在面向 Windows 的某些项目目标所包含的 targetver.h)中添加以下行:
#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00
//如果想全面覆盖的更全面,可以考虑以下定义方式:
#ifndef WINVER
#define WINVER 0×0501
#endif
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0×0501
#endif
#ifndef _WIN32_WINDOWS
#define _WIN32_WINDOWS 0×0501
#endif
#ifndef _WIN32_IE
#define _WIN32_IE 0×0601
#endif
//第三种书写方式
#ifndef WINVER//..0
#ifdef _WIN32_WINT //..1
//set WINVER based on _WIN32_WINNT
#define WINVER _WIN32_WINNT
#else
#define WINVER 0x0601
#endif//1
#endif//0
以下是对应平台宏定义值:
//
// _WIN32_WINNT version constants
//Minimum system required Macros to define
#define _WIN32_WINNT_NT4 0x0400 // Windows NT 4.0
#define _WIN32_WINNT_W95 0x0400 // Windows 95
#define _WIN32_WINNT_W98 0x0401 // Windows 98
#define _WIN32_WINNT_ME 0x0500 // Windows Me
#define _WIN32_WINNT_WIN2K 0x0500 // Windows 2000
#define _WIN32_WINNT_WINXP 0x0501 // Windows XP
#define _WIN32_WINNT_WS03 0x0502 // Windows Server 2003
#define _WIN32_WINNT_WIN6 0x0600 // Windows Vista
#define _WIN32_WINNT_VISTA 0x0600 // Windows Vista
#define _WIN32_WINNT_WS08 0x0600 // Windows Server 2008
#define _WIN32_WINNT_LONGHORN 0x0600 // Windows Vista
#define _WIN32_WINNT_WIN7 0x0601 // Windows 7
#define _WIN32_WINNT_WSR2 0x0601 // Windows Server 2008 R2
#define _WIN32_WINNT_WIN8 0x0602 // Windows 8
#define _WIN32_WINNT_WINBLUE 0x0603 // Windows 8.1
#define _WIN32_WINNT_WINTHRESHOLD 0x0A00 // Windows 10
#define _WIN32_WINNT_WIN10 0x0A00 // Windows 10
WIN32_IE
Windows IE浏览器的版本宏。浏览器各个版本宏的值定义在sdkddkver.h中,
//WIN32_IE
#define _WIN32_IE_IE20 0x0200
#define _WIN32_IE_IE30 0x0300
#define _WIN32_IE_IE302 0x0302
#define _WIN32_IE_IE40 0x0400
#define _WIN32_IE_IE401 0x0401
#define _WIN32_IE_IE50 0x0500
#define _WIN32_IE_IE501 0x0501
#define _WIN32_IE_IE55 0x0550
#define _WIN32_IE_IE60 0x0600
#define _WIN32_IE_IE60SP1 0x0601
#define _WIN32_IE_IE60SP2 0x0603
#define _WIN32_IE_IE70 0x0700
#define _WIN32_IE_IE80 0x0800
在sdkddkver.h中也可以看到,不同的Windows版本,所支持的IE浏览器版本是不同的。
使用方式参考以下的代码:
//_WIN32_WINNT
#ifdef _WIN32_WINNT
#if(_WIN32_WINNT_WIN8)
#define _WIN32_WINNT>=0x0602
#define WINVER>=0x0602 //win8
#elif(_WIN32_WINNT_WIN7)
#define _WIN32_WINNT>=0x0601
#define WINVER>=0x0601 //win7
#elif(_WIN32_WINNT_WSR2)
#define _WIN32_WINNT>=0x0601
#define WINVER>=0x0601 //Windows Server 2008 R2
#elif(_WIN32_WINNT_WS08)
#define _WIN32_WINNT>=0x0600
#define WINVER>=0x0600 //Windows Server 2008
#elif(_WIN32_WINNT_VISTA)
#define _WIN32_WINNT>=0x0600
#define WINVER>=0x0600 //Windows Vista
#elif(_WIN32_WINNT_WS03)
#define _WIN32_WINNT>=0x0502
#define WINVER>=0x0502 //Windows Server 2003
#elif(_WIN32_WINNT_WINXP)
#define _WIN32_WINNT>=0x0501
#define WINVER>=0x0501 Windows XP
#elif(_WIN32_WINNT_WIN2K)
#define _WIN32_WINNT>=0x0500
#define WINVER>=0x0500 Windows 2000
#elif(_WIN32_WINNT_NT4)
#define _WIN32_WINNT>=0x0400
#define WINVER>=0x0400 //Windows NT 4.0
#elif(_WIN32_WINNT_ME)
#define _WIN32_WINDOWS=0x0500
#define WINVER>=0x0500 //Windows Me
#elif(_WIN32_WINNT_W98)
#define _WIN32_WINDOWS>=0x0410
#define WINVER>=0x0410 //Windows 98
#elif(_WIN32_WINNT_WS03)
#define _WIN32_WINDOWS>=0x0400
#define WINVER>=0x0400 //Windows 95
#endif
#endif
//_WIN32_IE
#ifndef _WIN32_IE
#ifdef _WIN32_WINNT
// set _WIN32_IE based on _WIN32_WINNT
#if (_WIN32_WINNT <= _WIN32_WINNT_NT4)
#define _WIN32_IE _WIN32_IE_IE50
#elif (_WIN32_WINNT <= _WIN32_WINNT_WIN2K)
#define _WIN32_IE _WIN32_IE_IE501
#elif (_WIN32_WINNT <= _WIN32_WINNT_WINXP)
#define _WIN32_IE _WIN32_IE_IE60
#elif (_WIN32_WINNT <= _WIN32_WINNT_WS03)
#define _WIN32_IE 0x0602
#else
#define _WIN32_IE 0x0800
#endif
#else
#define _WIN32_IE 0x0800
#endif
#endif
WINVER简介:
WINVER是_WIN32_WINDOWS或_WIN32_WINNT的别名。
Windows的定义的版本宏是_WIN32_WINDOWS,_WIN32_WINDOWS针对的操作系统是windows95,windows98,windows ME这些分支。
后期Windows重新开发了NT系列,且编号从NT4.0开始。此时的Windows定义的宏版本是_WIN32_WINNT / _WIN32_WINNT_NT4。 _WIN32_WINNT,支持的操作系统是Windows 2000,XP, Server 2003,Vista,Server2008,Win7,Win8,Win10。不仅涉猎广,而且兼容更好,此时,_WIN32_WINDOWS宏便被废弃了。
如果需要更精细的版本控制方法,可以在 sdkddkver.h 中使用 NTDDI 版本常量。 下面是 sdkddkver.h 在 Windows 10 SDK 版本 10.0.18362.0 中定义的一些宏:
//
// NTDDI version constants
//
#define NTDDI_WIN7 0x06010000
#define NTDDI_WIN8 0x06020000
#define NTDDI_WINBLUE 0x06030000
#define NTDDI_WINTHRESHOLD 0x0A000000 /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10 0x0A000000 /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10_TH2 0x0A000001 /* ABRACADABRA_WIN10_TH2 */
#define NTDDI_WIN10_RS1 0x0A000002 /* ABRACADABRA_WIN10_RS1 */
#define NTDDI_WIN10_RS2 0x0A000003 /* ABRACADABRA_WIN10_RS2 */
#define NTDDI_WIN10_RS3 0x0A000004 /* ABRACADABRA_WIN10_RS3 */
#define NTDDI_WIN10_RS4 0x0A000005 /* ABRACADABRA_WIN10_RS4 */
#define NTDDI_WIN10_RS5 0x0A000006 /* ABRACADABRA_WIN10_RS5 */
#define NTDDI_WIN10_19H1 0x0A000007 /* ABRACADABRA_WIN10_19H1*/
#define WDK_NTDDI_VERSION NTDDI_WIN10_19H1 /* ABRACADABRA_WIN10_19H1 */
//
// masks for version macros
//
#define OSVERSION_MASK 0xFFFF0000
#define SPVERSION_MASK 0x0000FF00
#define SUBVERSION_MASK 0x000000FF
//
// macros to extract various version fields from the NTDDI version
//
#define OSVER(Version) ((Version) & OSVERSION_MASK)
#define SPVER(Version) (((Version) & SPVERSION_MASK) >> 8)
#define SUBVER(Version) (((Version) & SUBVERSION_MASK) )
_MSC_VER
_MSC_VER定义的是编译器的版本。当低版本编译器编译的项目,使用高版本编译器开发的时候,需要更新_MSC_VER,一般情况下,低版本向高版本更迭的时候,编译器会自动更新,不用手动修改。高版本一般情况下不可以向低版本迭代,(若必须,可重写项目代码)。
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#if _MSC_VER >= 1400 // for vc8, or vc9
#ifdef _DEBUG
//TODO: 在此添加额外的初始化代码
#elif
//TODO: 在此添加额外的初始化代码
#endif
//TODO: 在此添加额外的初始化代码
#ifdef _DEBUG
//TODO: 在此添加额外的初始化代码
#elif
//TODO: 在此添加额外的初始化代码
#endif
//TODO: 在此添加额外的初始化代码
#ifndef _DEBUG
//TODO: 在此添加额外的初始化代码
#elif
//TODO: 在此添加额外的初始化代码
#endif
#endif
_MSC_VER 定义编译器的版本。下面是一些编译器版本的_MSC_VER值。
//_MSC_VER 定义编译器的版本。下面是一些编译器版本的_MSC_VER值。
MS VC++ 12.0 _MSC_VER = 1800 (Visual C++ 2013)
MS VC++ 11.0 _MSC_VER = 1700 (Visual C++ 2012)
MS VC++ 10.0 _MSC_VER = 1600 (Visual C++ 2010)
MS VC++ 9.0 _MSC_VER = 1500 (Visual C++ 2008)
MS VC++ 8.0 _MSC_VER = 1400 (Visual C++ 2005)
MS VC++ 7.1 _MSC_VER = 1310 (Visual C++ 2003)
MS VC++ 7.0 _MSC_VER = 1300 (Visual C++ 2003)
MS VC++ 6.0 _MSC_VER = 1200 (Visual C++ 6.0)
MS VC++ 5.0 _MSC_VER = 1100 (Visual C++ 5.0)
WINSDK 、WINDDK
如果你查看的 sdkddkver.h 中可能没有列出以上所有 Windows 版本。 这意味着你很可能正在使用 Windows SDK 的较旧版本。 (如果你看到更多,则可能正在查看更新版本的 SDK。)
说到Win SDK就说明一下用途了:
1.开发WINDOWS应用程序,我们需要WINDOWS的SDK;
2.开发WINDOWS下的驱动程序,我们需要一个DDK/WDK。
默认情况下,Visual Studio 中的新 Windows 项目使用 Visual Studio 附带的最新 Windows SDK。 若要使用已单独安装的较新的 SDK,必须在项目属性中显式设置 Windows SDK。
下载:
如果默认的SDK不足以满足开发程序,不使用默认的SDK/DDK,可点击以下链接:
https://download.csdn.net/download/Controller_wgy/87457680?spm=1001.2014.3001.5503