编译DirectShow的SDK所遇到的问题及解决方法

最近在学习DirectShow,所以尝试着编译一下directx的SDK。

一开始下载了2005的Extras版本,编译SDK中的baseclasses时经常出问题。在网上找了很多帖子,后来换了一个方式。

通过命令行命令dxdiag查看了我的directX是9.0c。DirectX9.0c已经将DShow分离出去了,可以下载DirectX9.0b或者下载9.0c对应的SDK包。

我上面的方法就是下载了包,没好使。可能我设置的东西不够。后来就直接下载了DirectX9.0b。安装后,在.net下去编译baseclasses,只出现了下面的三个问题。很容易就编译通过了。在此做以记录,以备遗忘。

 

附1:
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,从而导致出错。

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

方法2:
在DXSDK自己的basetsd.h里自己定义#define POINTER_64 __ptr64

附2:
打开project->BaseClasses properties->configuration->C/C++ ->Command Line,增加/wd4430选项

附3:
C++标准语法的问题,因为在之前在for循环内定义的变量可以在for之外的地方使用,即在第一个for里for(int i,...),以后的for再使用i不必再声明,解决方法也很简单,打开project->BaseClasses properties->configuration->C/C++->Language->Force Comformance in For Loop Scrope设置为No即可。

 

完整的帖子,可以在这里看到:

http://www.chituwang.com/video/Detail.aspx?articleid=21805

你可能感兴趣的:(c,.net,properties,Microsoft,include,tools)