修改WINVER、_WIN32_WINNT和_MSC_VER
2016-10-13 16:33
681 查看
1.WINVER和_WIN32_WINNT
Visual C++已经不再支持Windows 95, Windows 98, Windows ME, Windows NT or Windows 2000。如果你的WINVER或_WIN32_WINNT宏被指定为以上这些windows版本,你必须修改该宏。当你升级用早期版本的Visual C++写的项目,可能会碰到与WINVER或_WIN32_WINNT宏相关的兼容性错误,如果这些宏被指定为不再支持的windows版本。
在Windows 95, Windows 98, Windows ME这一分支的操作系统中,Windows的定义的版本宏是_WIN32_WINDOWS。与此同时,Windows重新开发了NT系列,且其编号从NT4.0开始,经过Windows 2000,XP, Server 2003,Vista,Server2008,Win7,Win8,Win10。 在这一分支中,Windows定义的版本宏是_WIN32_WINNT。_WIN32_WINDOWS宏便被废弃了。
WINVER是_WIN32_WINDOWS或_WIN32_WINNT的别名。在SDK的sdkddkver.h中有其定义,可见WINVER<=>_WIN32_WINNT宏的值,如下图所示:
Window各个版本对应的宏值如下图所示:
由于我用的是Win7,所以显示到win7就结束了。
2._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
MS VC++ 8.0 _MSC_VER = 1400
MS VC++ 7.1 _MSC_VER = 1310
MS VC++ 7.0 _MSC_VER = 1300
MS VC++ 6.0 _MSC_VER = 1200
MS VC++ 5.0 _MSC_VER = 1100
在程序中加入_MSC_VER宏可以根据编译器版本让编译器选择性地编译一段程序。例如一个版本编译器产生的lib文件可能不能被另一个版本的编译器调用,那么在开发应用程序的时候,在该程序的lib调用库中放入多个版本编译器产生的lib文件。在程序中加入_MSC_VER宏,编译器就能够在调用的时根据其版本自动选择可以链接的lib库版本,如下所示。
参考链接:https://msdn.microsoft.com/en-us/library/6sehtctf.aspx
参考链接:http://www.cnblogs.com/zhcncn/archive/2013/05/21/3091052.html
Visual C++已经不再支持Windows 95, Windows 98, Windows ME, Windows NT or Windows 2000。如果你的WINVER或_WIN32_WINNT宏被指定为以上这些windows版本,你必须修改该宏。当你升级用早期版本的Visual C++写的项目,可能会碰到与WINVER或_WIN32_WINNT宏相关的兼容性错误,如果这些宏被指定为不再支持的windows版本。
在Windows 95, Windows 98, Windows ME这一分支的操作系统中,Windows的定义的版本宏是_WIN32_WINDOWS。与此同时,Windows重新开发了NT系列,且其编号从NT4.0开始,经过Windows 2000,XP, Server 2003,Vista,Server2008,Win7,Win8,Win10。 在这一分支中,Windows定义的版本宏是_WIN32_WINNT。_WIN32_WINDOWS宏便被废弃了。
WINVER是_WIN32_WINDOWS或_WIN32_WINNT的别名。在SDK的sdkddkver.h中有其定义,可见WINVER<=>_WIN32_WINNT宏的值,如下图所示:
Window各个版本对应的宏值如下图所示:
由于我用的是Win7,所以显示到win7就结束了。
2._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
MS VC++ 8.0 _MSC_VER = 1400
MS VC++ 7.1 _MSC_VER = 1310
MS VC++ 7.0 _MSC_VER = 1300
MS VC++ 6.0 _MSC_VER = 1200
MS VC++ 5.0 _MSC_VER = 1100
在程序中加入_MSC_VER宏可以根据编译器版本让编译器选择性地编译一段程序。例如一个版本编译器产生的lib文件可能不能被另一个版本的编译器调用,那么在开发应用程序的时候,在该程序的lib调用库中放入多个版本编译器产生的lib文件。在程序中加入_MSC_VER宏,编译器就能够在调用的时根据其版本自动选择可以链接的lib库版本,如下所示。
#if _MSC_VER >= 1400 // for vc8, or vc9 #ifdef _DEBUG #pragma comment( lib, "SomeLib-vc8-d.lib" ) #elif #pragma comment( lib, "SomeLib-vc8-r.lib" ) #endif #elif _MSC_VER >= 1310 // for vc71 #ifdef _DEBUG #pragma comment( lib, "SomeLib-vc71-d.lib" ) #elif #pragma comment( lib, "SomeLib-vc71-r.lib" ) #endif #elif _MSC_VER >=1200 // for vc6 #ifdef _DEBUG #pragma comment( lib, "SomeLib-vc6-d.lib" ) #elif #pragma comment( lib, "SomeLib-vc6-r.lib" ) #endif #endif
参考链接:https://msdn.microsoft.com/en-us/library/6sehtctf.aspx
参考链接:http://www.cnblogs.com/zhcncn/archive/2013/05/21/3091052.html
相关文章推荐
- _MSC_VER、_WIN32_WINNT
- _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
- 关于NTDDI_VERSION,_WIN32_WINNT,WINVER的含义
- 错误修改: error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x0403. Valu
- NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE含义
- 错误修改: error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x0403. Valu
- windows编程_WIN32_WINNT, _WIN32_IE,WINVER,_WIN32_WINDOWS的定义与取值
- _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h
- NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE定义宏的含义
- _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h
- NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE定义宏的含义
- NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE定义宏的含义
- Windows版本对应的NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE宏
- NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE定义宏的含义
- NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE
- WINVER WIN32 WINNT
- NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE
- Your version of the Windows SDK is earlier than 6.0 Try setting the 'WINVER' and '_WIN32_WINNT' defi
- NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE
- NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE定义宏的含义