5月 05

关于 DirectShow 中各个例子的编译转换问题

那些项目都是老旧的VC2003的,转换成05、08后,会有一系列编译问题,具体操作如下:

1. 首先要安装 DirectX SDK 和 Windows SDK,两个版本最好是相对应的,一致的,不能一个旧一个新。

2. 首先要编译基本库 BaseClasses, 编译时会遇到 ctlutil.h 中 operator=(LONG); 这一句不支持默认int的问题,这时需要在C/C++下的命令行添加一个编译指令 /wd4430

3. BaseClasses这个项目的默认 include 目录是相对与以前的DXSDK目录设置的(.,..\..\..\..\include),现在过期了,要重新设置成新安装的include目录,同时需要更改管理员->命令行下那个附加的库,直接把库删掉就行

4. 编译 StillCap,里面有个Qedit.h,新SDK For Win7里根本没有,幸好SDK6.0里有,找到它,去掉里面的一句话,把dxtrans.h注释掉,然后在#include <qedit.h>前面加上四句话

#define __IDxtCompositor_INTERFACE_DEFINED__

#define __IDxtAlphaSetter_INTERFACE_DEFINED__

#define __IDxtJpeg_INTERFACE_DEFINED__

#define __IDxtKey_INTERFACE_DEFINED__

5. 编译 StillCap 会出现很多外部链接没有,其实少了一个 striids.lib ,这个lib是windows SDK的,新的SDK里叫做 strmiids.lib

6. CMediaType 依赖的就是Baseclasses库,即需要strmbas lib

Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow 下也有一份示例代码,这些代码都是最新的VS2005的,很好用,不过如果把include目录添加到了VC++目录的最后面,就会因为采用了VC8的旧h文件而出现 error C2061: syntax error : identifier ‘__deref_out_range’

所以要把WinSDK和DXSDK的附加包含目录条目写在最前面!