_WIN32_WINNT, WINVER,WIN32_IE, _MSC_VER的值定义以及简单使用

目录:

引言

        _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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值