winnt.h(222) : error C2146解决办法

1>正在编译... 
1>stdafx.cpp 
1>E:/VS2005/VC/PlatformSDK/include/winnt.h(222) : error C2146: 语法错误 : 缺少“;”(在标识符“PVOID64”的前面) 
1>E:/VS2005/VC/PlatformSDK/include/winnt.h(222) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 
1>E:/VS2005/VC/PlatformSDK/include/winnt.h(5940) : error C2146: 语法错误 : 缺少“;”(在标识符“Buffer”的前面) 
1>E:/VS2005/VC/PlatformSDK/include/winnt.h(5940) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 
1>E:/VS2005/VC/PlatformSDK/include/winnt.h(5940) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
问题补充:我的编译环境为visual studio 2005 SP1(由于在vista下,所以还打了vs2005 for vista的补丁)。 
打开winnt.h文件,发现问题就是在winnt.h头文件中无POINTER_64的定义造成的。搜索vc下的头文件,发现在basetsd.h头文件中有POINTER_64的定义,而在winnt.h头文件中也包含了该头文件。于是直接把basetsd.h头文件中关于POINTER_64的宏定义(#define POINTER_64 __ptr64)抄过来,放在 
typedef void *PVOID; 
typedef void * POINTER_64 PVOID64; 
这两句的前面,再编译就无该问题了。 
虽然如此解决了编译问题,但总觉得不妥,于是又在网上搜了一下。发现也有人跟我一样的解决,但在microsoft的论坛上发现问题其实是头文件搜索顺序引起的。由于我安装了dxsdk9,dxsdk9的头文件搜索顺序在platformsdk之前。而在dxsdk9中也有basetsd.h头文件,而该文件无POINTER_64的定义,因此编译通不过。调整头文件搜索顺序后,编译就无问题了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值