来自博客:http://blog.csdn.net/chenyusiyuan/article/details/4643313的总结:
一般可通过调整 DirectShow/Include 在 Tools -> Options -> Projects and Solutions -> VC++ Directories -> Show Directories for –> Include Files 中的位置(把它下移到最下面),然后把 Project -> Properties -> Configuration Properties –> C/C++ 中的 Additional Include Directories 里面的内容(../../../../include)删掉,重新编译,PVOID64的错误就会消失,原因如下:
POINTER_64 是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(Microsoft Visual Studio 8/VC/PlatformSDK/Include/basetsd.h(23):#define POINTER_64 __ptr64),但DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错,只需要改变 include files 的优先级即可。
当然,也可以改写 winnt.h 中的代码,在下面这两行:
typedef void *PVOID;
typedef void *POINTER_64 PVOID64;
之前增加一行:
#define POINTER_64 __ptr64
不过最好不要轻易改写 winnt.h 。
除了以上方法外还有一种高效的方法,博友 @FlashInSky 提出:“这种做法在vs2010高版本中很难奏效,不如自己在包含头文件之前,写上#define POINTER_64 __ptr64”,此方法同样可以解决该错误,同时也避免修改winnt.h的内容。