最近拿到一个别人的工程,是使用VS.net创建的,而我的机器上只有vs2010,于是用自带的转换工具将它转换成vs2010的工程,转换之前我就很担心,怕转换完后会出问题,但是没有办法,我实在是不想再安一个vs.net了。

转完后果不其然真出了问题,在重新build工程时,报了一大堆错误,其中第一个就是“fatal error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended”,然后看错误的来源,竟然是atlcore.h,这我就无语了,这是mfc自带的文件,出错的可能性基本上为0,于是只好去请教谷大叔,发现很多人都遇到了这个问题,看了几篇博客和帖子后,大概明白了,应该是_WIN32_WINNT这个宏对应定义的系统的版本号,如果太低的话,编译器就会认为代码无法在当前的系统上编译。

在Project Property –> Configuration Properties–> C/C++  -> Command Line的Additional Options框中输入:

/D“_WIN32_WINNT=0×0501”

如果操作系统是Windows server 2003,则上述0×0501处改为0×0502;若为Windows 7,则为0×0601。

The following table describes the preferred macros in use by the Windows header files.

Minimum system required                Macros to define Windows Server 2008                     NTDDI_VERSION >= NTDDI_LONGHORN Windows Vista                                NTDDI_VERSION >= NTDDI_VISTA Windows Server 2003 SP1                 NTDDI_VERSION >= NTDDI_WS03SP1 Windows Server 2003                     NTDDI_VERSION >= NTDDI_WS03 Windows XP SP2                          NTDDI_VERSION >= NTDDI_WINXPSP2 Windows XP SP1                          NTDDI_VERSION >= NTDDI_WINXPSP1 Windows XP                                  NTDDI_VERSION >= NTDDI_WINXP Windows 2000 SP4                        NTDDI_VERSION >= NTDDI_WIN2KSP4 Windows 2000 SP3                        NTDDI_VERSION >= NTDDI_WIN2KSP3 Windows 2000 SP2                        NTDDI_VERSION >= NTDDI_WIN2KSP2 Windows 2000 SP1                        NTDDI_VERSION >= NTDDI_WIN2KSP1 Windows 2000                                NTDDI_VERSION >= NTDDI_WIN2K

The following table describes the legacy macros in use by the Windows header files.

Minimum system required                 Macros to define Windows Server 2008                      _WIN32_WINNT>=0x0600                                                          WINVER>=0x0600 Windows Vista                            _WIN32_WINNT>=0x0600                                                      WINVER>=0x0600 Windows Server 2003                      _WIN32_WINNT>=0x0502                                                           WINVER>=0x0502 Windows XP                               _WIN32_WINNT>=0x0501                                                        WINVER>=0x0501 Windows 2000                             _WIN32_WINNT>=0x0500                                                       WINVER>=0x0500 Windows NT 4.0                           _WIN32_WINNT>=0x0400                                                        WINVER>=0x0400 Windows Me                               _WIN32_WINDOWS=0x0500                                                        WINVER>=0x0500 Windows 98                               _WIN32_WINDOWS>=0x0410                                                    WINVER>=0x0410 Windows 95                               _WIN32_WINDOWS>=0x0400                                                     WINVER>=0x0400 Internet Explorer 7.0                        _WIN32_IE>=0x0700 Internet Explorer 6.0 SP2                 _WIN32_IE>=0x0603 Internet Explorer 6.0 SP1                 _WIN32_IE>=0x0601 Internet Explorer 6.0                        _WIN32_IE>=0x0600 Internet Explorer 5.5                         _WIN32_IE>=0x0550 Internet Explorer 5.01                        _WIN32_IE>=0x0501 Internet Explorer 5.0, 5.0a, 5.0b          _WIN32_IE>=0x0500 Internet Explorer 4.01                       _WIN32_IE>=0x0401 Internet Explorer 4.0                          _WIN32_IE>=0x0400 Internet Explorer 3.0, 3.01, 3.02        _WIN32_IE>=0x0300

VS2010遇到_WIN32_WINNT宏定义问题的更多相关文章

  1. DECLARE_GLOBAL_DATA_PTR宏定义问题

    最近闲着顺便看了看6410的uboot代码,因为友善的boot对nand部分代码做了隐藏,所以干脆找了光盘里面三星原厂的uboot代码来看,因为友善的boot代码肯定也是基于厂商的代码改的,肯定可以的 ...

  2. VS2010中编写宏添加作者信息与函数注释

    这里所说的宏是指通过一系列键盘组合键和可以插入自定义内容.下面介绍怎么编写一个自己的宏: 1.在Visual Studio 2010中按Alt+F11打开宏IDE: 2.打开后选择添加模块: 3.在弹 ...

  3. 自动添加注释—VS2010宏的使用

    在敲代码的过程中类和函数都需要进行注释,但总是一遍一遍的复制粘贴觉得很是麻烦,终于找到了一个不错的解决方法:使用宏. 所谓宏,就是一些命令组织在一起,作为一个单独命令完成一个特定任务.在日常的办公环境 ...

  4. 如何判断平台工具集去做条件编译(VC++目录、预处理器定义、$(PlatformToolsetVersion))

    作者:zyl910 从VS2010开始,提供了一个平台工作集(Platform ToolSet)选项用于配制vc编译版本.到了VS2012,更是因为默认平台工具集不支持WindowsXP,导致经常需要 ...

  5. C++及数据结构笔试面试常见知识点总结

    一些常考的基础知识点个人总结,大神勿喷,欢迎指正. 1.广义表的表尾是指除去表头后剩下的元素组成的表,表头可以为表或单元素值.表尾或为表,或为空表. 2.构造函数不能声明为虚函数. 构造函数为什么不能 ...

  6. 3.VS2010C++相关文件说明

    stdafx.h说明:stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展).所谓头文件预编译,就是把一个工程(Proj ...

  7. 坑爹的libxml2 for mingw 编译

    按照官方的readerme.txt说法生成Makefile之后,你会发现编译时候需要创建几个文件夹. 还有就是因为宏定义问题,报错,需要在config.h中加入#define HAVE_STDINT_ ...

  8. Win32中常用消息

    一 .WM_PAINT消息 1 WM_PAINT的产生   由于窗口的互相覆盖等,产生需要绘制的区域,那么会产生WM_PAINT消息. 一般情况下,不直接发送WM_PAINT消息,通过API声明需要绘 ...

  9. 关于VS2008中的targetver.h文件

    targerver.h文件的作用: 定义程序运行的环境,如限制程序只能在XP下运行,限制程序在只能在Vin7下运行 或限制程序只能在XP以上系统运行,或限制程序只能在Server2003以上系统运行. ...

随机推荐

  1. 学习练习 使用Servlet实现用户注册功能

    package com.hanqi.www; import java.io.IOException; import javax.servlet.ServletException; import jav ...

  2. javascript设计模式-享元模式

    享元模式采用一个共享来有效的支持大量细小粒度的对象,避免大量有相同内容的类的开销(如内存耗费),共享一个元类. 应用场景:页面存在大量的资源密集型对象:他们具备一些共性,可以分离出公共操作的数据. 一 ...

  3. ibatis 改下数据库连接

             <!--<dataSource name="iBatisNet" connectionString="data source= DESKTO ...

  4. JAVA语法细节(1)

    1.变量的作用域 变量的作用域从变量定义的位置开始,到变量所在的那对大括号结束.变量定义内存开辟一块空间用于该变量,变量到达作用域时,该变量从内存中消失. 2.变量的数据类型 变量基本数据类型:byt ...

  5. solr5.5教程-tomcat布署

    tomcat和solr在各自官网下载,版本如下: tomcat版本:8.0.24 solr版本:5.5.0 1.solr解压后,目录结构如下: 2.tomcat的webapps里新建solr目录, 把 ...

  6. C语言文法 改

    <程序> ->  <外部声明> |  <程序>  <外部声明> <外部声明>  ->   <函数定义>  |  &l ...

  7. Unieap3.5-禁用Form表单中的全部标签

    var form=unieap.byId('customerForm'); var children=form.getDescendants(); dojo.forEach(children,func ...

  8. 【UEditor】远程上传图片到【七牛云存储】

    杂谈:最近在玩一个第三方的微信开发平台,里面的图片都是上传到[七牛云存储]的,用了一下非常的好用,支持各种语言,SDK齐全.支持全分布式系统架构以及存储技术和数据加速,于是决定将网站的图片都存储到七牛 ...

  9. 十五、struts2中的拦截器(框架功能核心)

    十五.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 功能是一回事. 过滤器是Servlet规范中的技术,可以对请求和响应进行过滤. 拦截器是Struts2框架中的技术,实现AOP(面 ...

  10. ADO.NET中的Connection详解

    连接字符串 1.写法一 "Data Source=服务器名; Initial Catalog=数据库; User ID =用户名; Password=密码; Charset=UTF8; &q ...