现在的位置: 首页 > 综合 > 正文

error C1189:#error:This file requires _WIN32_WINNT to be #defined at least to 0×0403

2014年10月19日 ⁄ 综合 ⁄ 共 2578字 ⁄ 字号 评论关闭

原作者所写系统环境不清楚,在win7与VS2010上使用不兼容,出现错误,如图所示


--------------------解决办法-----------------

第1步:

查找stdafx.h头文件(一般头文件定义都在这里,首选就是找这里),结果如上图所示,一共4段---->前3段是关于系统的(干涉,此处就是系统不兼容,所以全部注释掉),最后1段是讲IE的(不干涉,默认处理)

第2步:

旧版本第1步删除了,新版本怎样添加呢?---->查找MSDN2010版本的(本地的之前装了,不过不小心删除后就一直没用了,现介绍网上的MSDN,网址如下:http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=ZH-CN&k=k(MSDNSTART)&rd=true,或者直接输入MSDN.com也可以

然后查找"修改 WINVER 和 _WIN32_WINNT"--->网址是这个:http://msdn.microsoft.com/zh-cn/library/6sehtctf(VS.90).aspx,不想或不会查找也可以,直接看截图,如图所示:


--------------这些资料都是来自官网,现在应该知道错误原因了吧,第3步,就直接告诉你方法---------------

第3步:解决方法

步骤1:注释前3段

步骤2:增加1段(有2种方法:1种是MSDN上的,1种是兼容版的模式,2种都可以用,第2种兼容模式是供参考的材料)

------------------第1种方法------------------

#define WINVER 0x0500
#define _WIN32_WINNT 0x0500


------------------第2种方法------------------写法是摘抄兼容模式的写法,供以后兼容性做的参考提供,另外上面的图中提供了更多兼容模式,当然也保存了下来,详见最后的备注

#ifndef WINVER 0x0500
#define _WIN32_WINNT 0x0500
#endif

备注1:源代码,方便复制用

-----------------------------------分2部分:第1部分:老版本 第2部分:新版本----------------------------------------

----------------------------------第1部分:老版本--------------------------------------

// 如果您必须使用下列所指定的平台之前的平台,则修改下面的定义。
// 有关不同平台的相应值的最新信息,请参考 MSDN。
#ifndef WINVER     // 允许使用 Windows 95 和 Windows NT 4 或更高版本的特定功能。
#define WINVER 0x0400   //为 Windows98 和 Windows 2000 及更新版本改变为适当的值。
#endif

#ifndef _WIN32_WINNT   // 允许使用 Windows NT 4 或更高版本的特定功能。
#define _WIN32_WINNT 0x0400   //为 Windows98 和 Windows 2000 及更新版本改变为适当的值。
#endif     

#ifndef _WIN32_WINDOWS   // 允许使用 Windows 98 或更高版本的特定功能。
#define _WIN32_WINDOWS 0x0410 //为 Windows Me 及更新版本改变为适当的值。
#endif

#ifndef _WIN32_IE    // 允许使用 IE 4.0 或更高版本的特定功能。
#define _WIN32_IE 0x0400 //为 IE 5.0 及更新版本改变为适当的值。
#endif

----------------------------------第2部分:新版本--------------------------------------

// 如果您必须使用下列所指定的平台之前的平台,则修改下面的定义。
// 有关不同平台的相应值的最新信息,请参考 MSDN。
#ifndef WINVER     // 允许使用特定于 Windows XP 或更高版本的功能。
#define WINVER 0x0501   // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif

#ifndef _WIN32_WINNT   // 允许使用特定于 Windows XP 或更高版本的功能。
#define _WIN32_WINNT 0x0501 // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif      

#ifndef _WIN32_WINDOWS   // 允许使用特定于 Windows 98 或更高版本的功能。
#define _WIN32_WINDOWS 0x0410 // 将它更改为适合 Windows Me 或更高版本的相应值。
#endif

#ifndef _WIN32_IE    // 允许使用特定于 IE 6.0 或更高版本的功能。
#define _WIN32_IE 0x0600 // 将此值更改为相应的值,以适用于 IE 的其他版本。值。
#endif

一共2种版本,新版本是在最近的例子中找出来的
备注2:另外本次在查找MSDN中,也发现了一个问题,比如刚才查找的C1189,MSDN上就介绍的很好.顺着这个线索,你可以发现MSDN中关于错误代号的解释非常详细.当然本地安装的MSDN上也有(推荐用网上的MSDN),效
果如图


附注1:

#define WINVER 0x0400之类定义
写了,反而错误都来了.版本写高了,放到低版本上又说高了,写低了,放到高版本上又说低了.(上面有2种版本的代码)
啥都不写,一点错也没有-------------------->还待更多实例验证

据说是MFC类向导自动生成(机器写的),不用用户定义,这些宏是管理MFC,ATL哪些函数能使用,哪些函数调用哪些DLL,哪函数函数的功能无效的.

写这的作用:从字面上就能看出是版本兼容问题,当然MSDN上也确定是版本问题(可以查MSDN了解版本代号)

有2个办法可以解决.1个是直接删除,1个是修改到合适版本
------>至于选哪个办法合适,仅仅目前的1,2个例子无法说明问题,待以后例子多时,在来跟踪总结

抱歉!评论已关闭.