实际上,所有的code都是来源于<Programming Microsoft DirectShow for Digital Video and Television>.我现在真的是如此高兴,于是我就想到写BLOG了.你想,经过1天的郁闷,最后程序竟然可以运行了,此时的心情可想而知.现在,我来把这获得快乐与成功过程描述出来吧.
于几天前,我到www.itepub.net上找到了上面提到的书.可能大家会想,学DirectShow为何不用陆老师的书呢?原因是如此的简单,陆老师的书很喜欢讲每个函数的源代码,但是对于一个象我这样初次接触DirectShow的人来说,那些内容是如此的晦涩.而我此时的需要是:告诉我,某个函数的功能以及注意事项.于是,理所当然的,我找到了上面提到的那本书.说实话,本人英语还行吧,下载之后,一直看(有时间就看),看到了Part1的Programming DirectShow Applications,里面有一个范例DSRender,我没有这本书的源代码,看到书上有main函数,于是建了一个SLN,将main拷进去.由于初次接触DirectShow,根本不知道该包含什么头文件,也不知道要导入什么库文件,一编译,N多错误.
1 CoInitializeEx找不到,到MSDN一查,包含了头文件objbase.h,并加入:#pragma comment(lib,"Ole32.lib") .编译,仍然如此,BAIDU 一下,需要在C/C++的Processor中加入_WIN32_DCOM,按一下F5,该错误解决;
2 IGraphBuilder,IMediaControl,IMediaEvent标示符不可识. 凭经验找到VC7的文件夹,搜索包含内容:IGraphBuilder,IMediaControl,IMediaEvent,找到了其对应的头文件,包含进去,错误依旧.接着我又到DXSDK中找一下,发现要导入库strmiids.lib,用#pragma comment(lib,"strmiids.lib"),此时错误变了;
3 CLSID_FilterGraph不可识别.此时,我试过多种办法,错误依旧.不知为何,灵光闪现,竟然找到DXSDK的"Setting Up the Build Environment".看完后,恍然大悟.去掉先前不必的头文件,加入如下代码:
#include "dshow.h"
#pragma comment(lib,"strmiid.lib")
//下面的代码只有当你使用了 AMGetErrorText ,才需要
#pragma comment(lib,"Quartz.lib")
到此一切搞定,在没有随书光盘的情况下,通过阅读DXSDK,完成了My First DirectShow Application:DSRender.
I am so happy now.Hi ,friends,if you read this article and have some ideas ,please write down and contact me.
Of course ,if you have the codes of <Programming Microsoft DirectShow for Digital Video and Television ,contact me ,too.
My E-mail is:linyuancan@126.com