您的位置:首页 > 其它

使用directshow时Baseclasses的编译问题

2010-03-12 16:14 471 查看
要在VS2005下使用DirectShow, 首先下载directX sdk
9.0b,解压,安装,在安装目录下找到DXSDK/Samples/C++/DirectShow/BaseClasses路径,找到
baseclasses.sln,然后我们需要对它进行编译,生成相应的lib文件加以使用。

为什么要用directshow?因为opencv的视频读写功能太弱了,速度好像只能达到directshow的一半左右,所有用directshow的视频处理功能,将有效提升项目中视频分析速度!

编译中遇到的error如下:

1)第一个错误

error C2146: syntax error : missing ';' before identifier 'PVOID64'

改正:找到下面两句

typedef void *PVOID;

typedef void *POINTER_64 PVOID64;

在这两行代码前增加:

#define POINTER_64 __ptr64

2)第二个错误

wxdebug.cpp(567) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

将代码

static g_dwLastRefresh = 0;

改成

static DWORD g_dwLastRefresh = 0;

3)第三个错误

错误./winutil.cpp(2104) : error C2065: “Count”: 未声明的标识符



for (UINT Count = 0;Count < Result;Count++)

改成

UINT Count;

for (Count = 0;Count < Result;Count++)

4)第四个错误

outputq.cpp(664) : error C2065: “iDone”: 未声明的标识符

将代码

for (long iDone = 0;

改成:

long iDone;

for (iDone = 0;

这样改了之后,build应该可以通过了。

先把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

在linker->input->additional dependency中加入strmbasd.lib winmm.lib(debug模式下)

或者strmbase.lib winmm.lib(release模式下)

把以上设置好,需注意调整include file的位置,一般让platformSDK/Include位于DXSDK/Include后面(very important!!!),

基本就可以将DirectShow程序在vs2005环境中编译通过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: