error C2146: 语法错误 : 缺少“;”(在标识符“PVOID64”的前面)

使用vs2010编写的程序,使用vs2013打开时报错。

打开winnt.h文件,发现问题就是在winnt.h头文件中无POINTER_64的定义造成的。搜索vc下的头文件,发现在basetsd.h头文件中有POINTER_64的定义,而在winnt.h头文件中也包含了该头文件。而在dxsdk中也有basetsd.h头文件,而该文件无POINTER_64的定义,因此编译通不过。网上说的改变包含头文件的顺序也没用。

我的解决方法:

1、直接将dxsdk中的basetsd.h头文件进行修改,在其中添加一行定义代码: #define POINTER_64 __ptr64。

2、这是网上看到的方法,可以不用修改SDK文件:

在stdafx.h的开头,加上如下代码:

#ifndef POINTER_64
#if !defined(_MAC) && (defined(_M_MRX000) || defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_VER >= 1100) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
#define POINTER_64 __ptr64
typedef unsigned __int64 POINTER_64_INT;
#if defined(_WIN64)
#define POINTER_32 __ptr32
#else
#define POINTER_32
#endif
#else
#if defined(_MAC) && defined(_MAC_INT_64)
#define POINTER_64 __ptr64
typedef unsigned __int64 POINTER_64_INT;
#else
#if (_MSC_VER >= 1300) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
#define POINTER_64 __ptr64
#else
#define POINTER_64
#endif
typedef unsigned long POINTER_64_INT;
#endif
#define POINTER_32
#endif
#endif



你可能感兴趣的:(bug解决)