Windows SDK Tips: stdafx.h: 关于_WIN32_WINNT

来源:互联网 发布:js继承是什么 编辑:程序博客网 时间:2024/05/16 07:41

遇到的问题

最近在调试一个老程序,发现这个程序居然无法在Visual Studio 2012中调试运行,每次调试运行的时候就闪退了。根据编译中的提示查资料,最后解决的办法如下:
在stdafx.h中,原先的 _WIN32_WINNT 定义的值是 0x0400,改为0x0403就好了。

官方解释

MSDN有一篇文章解释了 _WIN32_WINNT 以及 WINVER 的用法:

Using the Windows Headers

根据这篇文章的解释,_WIN32_WINNT 是用来申明,此程序面向哪个版本的Windows编程。如果你想要使用高版本的Windows API,那么这个值就要定义得大一些,反之如果要兼容更早期的版本,这个值就要定义得低一些。

之前那个老程序的值定义得也太低了点吧,0x0400,版本比Windows 98还早呢。Windows 98的值是0x0403,0x0400对应的应该是Windows NT 4.0。

Windows XP对应的值是0x0501,比这个版本更早的值在MSDN上现在已经不列出来了,我在一篇博客中看到:

Minimum system required Minimum value for _WIN32_WINNT and WINVER Windows NT 4.0 0x0400 Windows 98 0x0403 Windows Me 0x0490 Windows 2000 0x0500 Windows XP 0x0501

还有关于 _WIN32_IE 的早期版本的值:

Minimum system required Minimum value for _WIN32_IE Internet Explorer 3.0, 3.01, 3.02 0x0300 Internet Explorer 4.0 0x0400 Internet Explorer 4.01 0x0401 Internet Explorer 5.0, 5.0a, 5.0b 0x0500 Internet Explorer 5.01, 5.5 0x0501 Internet Explorer 6.0 0x0600

Windows XP和IE6以上的版本请查看MSDN里的那篇文章。

参考

修改 WINVER 和 _WIN32_WINNT

0 0