DirectShow库的编译及VS环境配置

DirectShow编译:BaseClasses 一.简介 SDK文档注解:DirectShow基于C++的一个基础类和工具,后续所有编译其它Filter和子项目都需要这个它! 二.打开 //需要迁移:本人使用vs2013 三.编译 //直接编译让它报错 error C2146: 语法错误: 缺少“;”(在标识符“PVOID64”的前面) 干掉之后继续编译 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 接着编译报错 编译通过 //到这里baseclasses就编译成功... 阅读详情

一. 第一步,设置INCLUDE及LIB目录

在把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++/DirectShow/Common
D:/SDK/DXSDK/Samples/C++/Common/Include (这里可能是Common)
(接下来才是VC原来的)

在后边的library files中也需要增加三到四种的文件:
D:/SDK/DXSDK/Lib
D:/SDK/DXSDK/Samples/C++/DirectShow/BaseClasses/Debug (基类编译前,这两个可以不设置)
D:/SDK/DXSDK/Samples/C++/DirectShow/BaseClasses/Release
(接下来才是VC原来的)

二. 第二步,编译BaseClasses基类

本人使用的是VS2005,要使用DirectShow进行编程,需要对环境进行必要的配置。
第一步:对dssdk中的baseclass.sln进行编译,生成需要的debug和release文件,具体步骤如下


在VS6中,安装DirectShow9c版本之后,直接打开BaseClass中的Vc6工程baseclasses.dsw文件,

直接编译即可,编译Debug Release Debug_Unicode   Release_Unicode四个版本,都需要进行

额外的设置(头文件或者链接库目录设置)。
DirectShow的BaseClass中已经带了VS2005的工程文件baseclasses.sln,在vs2005中打开此文件

,提示你进行必要的工程转换,转换之后开始编译,编译过程一般会出现下面两个问题:
(1)C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/include/winnt.h(222) :

error C2146: syntax error : missing ';' before identifier 'PVOID64'
(2)error C4430: missing type specifier - int assumed. Note: C++ does not support

default-int
(3)error C2065: 'Count' : undeclared identifier
第一类问题的解决:project->BaseClasses properties->configuration->C/C++ -> General-

>Additional Include Directories里面的内容(.,../../../../include)删掉,重新编译,

PVOID64的错误消失,原因如下:
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,从而导致出错,只需要改变include

files的优先级即可。。当然,也可以改写winnt.h中的代码,将
typedef void *PVOID;
typedef void * POINTER_64 PVOID64;
改成
typedef void *PVOID;
typedef void * POINTER_64;
typedef void * PVOID64;
第二类问题的解决:错误发生在:operator=(LONG);函数定义中,这是因为在VC6中,如果没有显

示的指定返回值类型,编译器将其视为默认整形;但是vs2005不支持默认整形,解决这个问题不

能修改每个没有显示指示返回值类型的函数地方,可以用wd4430来解决;具体的在工程选项中的

c++/Command Line中添加/wd4430即可。
第三个错误发生在for循环中,vc6中for循环中定义的变量相当于在for外面定义,可以在for之外

地方使用;但是vs2005for循环中定义变量相当于域{}变量,只能在for循环中使用。要解决这个

问题,可以通过修改vs2005的工程选项:”Project Option” --– “ C++ ” —--

“Language” --- “Force Comformance in For Loop Scrope” 设置为No即可。
完成上面的设置,BaseClass工程基本可以编译通过了。

三. 第三步,实战DirectShow配置

(1)使用VC向导生成一个具体项目,如Win32 Dynamic-Link;     
     注意字符集设为”未设置“
     输出设置为"$(OutDir)/$(ProjectName).ax"

(2)包含头文件streams.h;
     streams.h中间接包含了windows.h,uuids.h,ddraw.h等头文件,所以大多情况下,不需要其

它头文件。某些情况下,如果编译出现问题,可以加入atlbase.h,initguid.h,stdio.h,stdlib.h

(3)在VC的菜单中选择Project|Settings|C/C++,在弹出的对话框中的Category中选择Code

generation,然后在Calling convention中选择_stdcall;

(4)使用多线程语言运行时库,即在VC的菜单中选择Project|Settings|C/C++,在弹出的对话框

中的Category中选择Code generation,然后在Use run-time library中,Debug版选择Debug

Multithreaded,Release版选择Multithreaded。

(5)配置必要的链接库文件,即在VC的菜单中选择Project|Settings|Link,在弹出的对话框中

的Category中选择General,然后在Object/library modules中输入如下代码:
    Debug版本   strmbasd.lib, msvcrtd.lib, winmm.lib
    Release版本 strmbase.lib, msvcrt.lib, winmm.lib
并且选中Ignore all default libraries。(PS:这句有点误导)
DirectShow SDK建议,DirectShow应用程序应该至少连接库文件strmiids.lib和quartz.lib。前

者定义了DirectShow标准的CLSID和IID,后者定义了导出函数AMGetErrorText(如果应用程序中

没有使用到这个函数,也可以不连接这个库)。如果程序里包含了头文件streams.h,则一般库文

件还要连接strmbasd.lib、uuid.lib、winmm.lib、msvcrt(d).lib
    注意:必须设置“忽略所有默认库“为”否“,否则会出现
DS-Render.def : error LNK2001: 无法解析的外部符号 DllCanUnloadNow
DS-Render.def : error LNK2001: 无法解析的外部符号 DllGetClassObject

(6)如果按照上述操作仍有如下类似的错误提示

error LNK2001: unresolved external symbol _CLSID_FilterGraph

请在link下添加strmiids.lib和quartz.lib,特别是在2003开发环境下应当添加该链接库。因为

DirectShow SDK建议,DirectShow应用程序应该至少连接库文件strmiids.lib和quartz.lib。前

者定义了DirectShow标准的CLSID和IID,后者定义了导出函数AMGetErrorText(如果应用程序中

没有使用到这个函数,也可以不连接这个库)。如果程序里包含了头文件streams.h,则一般库文

件还要连接strmbasd.lib、uuid.lib、winmm.lib。

还必须加入 #include <initguid.h> 否则会出现 无法解析的符号 _CLSID_XXXX

出现下述错误时
error LNK2001: unresolved external symbol "class ATL::CAtlBaseModule

ATL::_AtlBaseModule" (?_AtlBaseModule@ATL@@3VCAtlBaseModule@1@A)

Project|Settings|Link 在Debug下包含atls.lib ,在Release下添加atlsd.lib 库。

出现下述错误时
c:/microsoft directx 9.0 sdk (summer 2004)

/samples/c++/directshow/baseclasses/wxdebug.h(329) : error C2146: 语法错误 : 缺少“;

”(在标识符“m_pString”的前面)
c:/microsoft directx 9.0 sdk (summer 2004)

/samples/c++/directshow/baseclasses/wxdebug.h(326) : error C2065: “m_pString”: 未声

明的标识符
请添加如下代码
#include <tchar.h>
#define PTCHAR (TCHAR *)

////////////////////////////////////////////////////////////////////////////////////

下面是一些DirectShow入门文章及VC环境配置收藏
介绍Directshow的一些文章链接,放在这里,作为普及读物。

http://www.learnsky.com/bbs/printpage.asp?BoardID=10&ID=887

http://tech.sina.com.cn/s/2005-08-18/0933696822.shtml

http://blog.csdn.net/laiyiling/category/251892.aspx

还有陆其明老师的博客:

http://blog.csdn.net/happydeer/archive/2007/04/01/1548426.aspx

http://jemylu.spaces.live.com/

几本书的源代码现在也都可以从如下地址下载到:

http://www.directshow.cn/forum/viewthread.php?tid=302&extra=page%3D1

strmbasd.lib VS2013编译baseclasses.sln后得到的strmbasd.lib文件,用于本人打开USB RAW摄像机的程序代码运行所需要。2019.9.5 立即下载

相关推荐

directshow开发用的lib(strmbasd.lib+strmiids.lib+quartz.lib+ddraw.lib)

directshow开发用的lib(strmbasd.lib+strmiids.lib+quartz.lib+ddraw.lib),用sdk编译产生的,自已编译的话受平台限制会有很多麻烦;这是我修改过的能在VS2005下通过编译的版本(修正了循环一致性,默认返回值等一系列老式不规范语法)

strmbase.lib和strmbasd.lib生成

最近编译MicroSIP,里面有用到strmbase.lib,网上找了下,都要积分下载。 没有积分的我只能自己动手。 PC是win7 64位的。+vs2015   下载  Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 (ISO) 地址:https://www.microsoft.com/en-us/down...

ssj901217的博客 3882

Directshow下Baseclasses的编译:strmbasd.lib和strmbase.lib

Directshow下Baseclasses的编译,分别是Debug版本(strmbasd.lib)和Release版本(strmbase.lib),

VS 使用常见错误

1.fatal error C1083: 无法打开包括文件:“xxxxx.h”: No such file or directory 缺少头文件,编译时找不问题件路径 解决:在项目右击->属性->配置属性->C/C++->常规->附加包含目录,添加缺少头文件路径即可 2.fatal error LNK1104: 无法打开文件“strmbasd.lib” 找不到,需要添加目录 解决:我的目录在dx里面(C:\DXSDK\Samples\C++\Dire..

x_20150420的博客 393

directshow在vc2005的配置

一.DirectShow环境配置:本人使用的是VS2005,要使用DirectShow进行编程,需要对环境进行必要的配置。第一步:对dssdk中的baseclass.sln进行编译,生成需要的debug和release文件,具体步骤如下:在VS6中,安装DirectShow9c版本之后,直接打开BaseClass中的VS6工程baseclasses.dsw文件,直接编译即可,编译Debug 

zp752963831的专栏 1779

转帖:DirectShowVS2005中环境配置

转载请标明是引用于 http://blog.csdn.net/chenyujing1234   baseclasses参考代码(VS2005下编译通过):  http://www.rayfile.com/zh-cn/files/12ac1b0c-7335-11e1-94b4-0015c55db73d/   先介绍系统环境: XP Professional sp2 visual stu

chenyujing1234的专栏 1238

DirectShowVS下的环境配置

转帖:DirectShowVS2005中环境配置 2008年04月17日 星期四 10:58 作者:liguisen Blog:http://blog.csdn.net/liguisen 先介绍系统环境:XP Professional sp2visual studio 2005 version 8.0.50727.42DirectX 9.0(9.0b)

mlchen2009的专栏 501

strmbasd.lib & strmbase.lib 下载

在做VC6摄像头开发时,自己手动编译生成的strmbasd.lib和strmbase.lib 本人的系统为XP,不代表在其他系统上一定能行!

win10 + VS2013下载directshow相关示例代码及directshow文件调用

最近需要做虚拟摄像头,网上下载了一个现成的代码调试,用directshow,记录一下环境配置和修改部分,给有需要的朋友 1,环境配置:下载dierectshow vs2013可以自行扩展下载相关代码,不需要自己安装directshow的SDK(毕竟directshow的SDK很早就集成到windows的SDK中去了,安装windowsSDK太麻烦了),参考windows 10+VS2015配置...

程序媛 1万+

DirectShow环境配置(VC6)

1.简介:  DirectShow是一个windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,同时支持使用WDM驱动或早期的VFW驱动来进行多媒体流的采集。DirectShow整合了其它的DirectX技术,能自动地侦测并使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。

schoolers的专栏 6593

DirectShowVS2005中环境配置

<br />网址:http://blog.cnii.com.cn/?75821/viewspace-24418.html<br /> <br /><br />一.DirectShow环境配置:<br />本人使用的是VS2005,要使用DirectShow进行编程,需要对环境进行必要的配置。<br />第一步:对dssdk中的baseclass.sln进行编译,生成需要的debug和release文件,具体步骤如下:<br />在VS6中,安装DirectShow9c版本之后,直接打开BaseClass中

GUANYIJUN123的专栏 625

VS2005编译DirectShow的问题与解决

安装DXSDK 后, 使用VC60编译生成strmbasd.lib等静态都没有问题, 但在VS2005下使用这些静态时, 编译不通过, 可能是由于编译器不同的原因吧. 所以, 要VS2005工程使用DirectShow上的静态, 应该先使用VS2005生成这些静态. 使用VS2005打开DXSDK下DirectShow的BaseClass的工程, 经过转换进行编译, 编译报错:er

cay22的专栏 2839

VS2010配置DirectShow

http://blog.csdn.net/yangalbert/article/details/7408747 http://blog.163.com/wuyuanhere@126/blog/static/1733237282011819111560/     1、下载DirectShow 下载地址:http://download.csdn.net/detail/yangalbert/4

chinabinlang的专栏 8373

DirectShowVS2005中环境配置

一.DirectShow环境配置: 本人使用的是VS2005,要使用DirectShow进行编程,需要对环境进行必要的配置。 第一步:对dssdk中的baseclass.sln进行编译,生成需要的debug和release文件,具体步骤如下: 在VS6中,安装DirectShow9c版本之后,直接打开BaseClass中的Vc6工程baseclasses.dsw文件,直接编译即可,编译

hope编程开发专栏 848
上一篇: 静态变量 静态函数
下一篇: 大话HTTP协议
simbi
博客等级 码龄22年 86粉丝 24原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值