关于 typedef void * POINTER_64 PVOID64;问题
不知道什么时候,使用较新版本的VC IDE编译“转换”以后的旧版本的VC项目时,会收到来自于“winnt.h”的错误;而错误的原因主要由下面这行代码引起的。
typedef void * POINTER_64 PVOID64;
很明显,“POINTER_64”应该是为了适应未来的64位指针而“新生的事物”!编译/预处理器可能是受了旧版VC项目的“束缚”,无法解释这个新玩意儿是咋回事。糟糕的是,我也不记不得有这么一回事了 :-(
这个问题我以前处理过,而且处理得还蛮不错的。可时间一久,我却什么也记不起来了。真是——郁闷……
事情是这么来的那么去的:我用VC2008(以前是2005)编译DirectShow/baseclasses,总是无法通过(VC2003以前是没有这个问题的)。虽然我已经知道采用“人工干预”的方式,定义一个宏,用“__ptr64”替换“POINTER_64”貌似解决问题,但是,我需要的不是这个。毕竟POINTER_64/__ptr64是什么玩意不是一般人能够解释得了的!
我就找啊,想啊,回忆啊……终于有所突破!(我以前也是这么突破过一次的。)
POINTER_64只在“BaseTsd.h”中有定义(这个文件就是用来定义一些奇怪符号的 :-( ),定义为__ptr64。
winnt.h所在的目录是“C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include”,它所引用的basetsd.h应该也是在这个目录里的。然而,让我意外的是,此时的IDE却只能调用出“C:\DXSDK\Include”(DirectX 9.0 SDK,12/19/2002)目录内的basetsd.h!
对于这个转换过来的旧版本VC项目,有一些隐蔽的东西也被原封不动地转换过来了——那就是“项目属性”里的“附加包含目录”!
在这个地方陈列的目录是相当的优先——比“VC++目录”里的设置项——那是相当的优先……那玩意儿……总之是比较优先。
……
……
(知道是咋回事就好。至于解决这个问题的办法……那玩意儿……是相当的多……