`
mmdev
  • 浏览: 13218819 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

DX90SDK SDK源码分析(四) DirectShow在VS2005中PVOID64问题和配置问题

 
阅读更多

之前的例子都是在VS2008上编译,现在想转到VS2005上,自然库也得重新编译。

在VS2005上使用DirectShow,首次编译发现出现以下错误:
error C2146: syntax error : missing ';' before identifier 'PVOID64'

看了很多关于这个问题的讨论,解答,无非就是改写winnt.h中的代码:
原代码:
typedefvoid*PVOID;
typedef
void*POINTER_64PVOID64;

在这两行代码前增加:

#definePOINTER_64__ptr64

但这明显是下下之策,而且真正原因没人说的清楚。

看到一位xd,给了一种解释,是比较正确的, 如下:
POINTER_64是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(MicrosoftVisualStudio8\VC\PlatformSDK\Include\basetsd.h(23):#definePOINTER_64__ptr64),但DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错。


方法1:


在Tools->Options->ProjectsandSolutions->VC++Directories->IncludeFiles里确保系统包含目录(以S打头的)在最前面,同时在projectproperties下面的“C/C++->General”中确保“AdditionalIncludeDirectories”为空(因为它会被优先编译,这样就轮不到VC\PlatformSDK\Include\basetsd.h),所有的包含目录都应该在上面的include里面。这种方法不用改代码。


方法2:


在DXSDK自己的basetsd.h里自己定义#definePOINTER_64__ptr64


PVOID64问题解决后,还要对VS2005进行配置:


先把dxsdk中提供的baseclass编译通过,用四种方式编译,会分别生成四个lib,一般只用到了其中的Debug和Release文件,
在tool|option|vc++ directories中包含的files中设置如下。
这里需要加入得include files有三种:
D:\SDK\DXSDK\Include
D:\SDK\DXSDK\Samples\C++\DirectShow\BaseClasses
D:\SDK\DXSDK\Samples\C++\Common\Include

在后边的library files中也需要增加三到四种的文件:
D:\SDK\DXSDK\Lib
D:\SDK\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug
D:\SDK\DXSDK\Samples\C++\DirectShow\BaseClasses\Release

把以上设置好,需注意调整include file的位置,一般让platformSDK\Include位于DXSDK\Include后面,
基本就可以将DirectShow程序在vs2005环境中编译通过。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics