您的位置:首页 > 其它

使用BCB进行DirectShow开发(一)SDK和配置开发环境

2007-07-21 03:45 513 查看
最近用BCB刚刚写了一个视频直播的应用。

DirectX9 SDK下载与安装:

有两个办法,去下标准的DirectX SDK来安装,并完成必须的定制过程,这是一个很惨的过程,至少对了我这样的菜鸟而言,第一次用DirectX SDK,我还不得不为了能顺利以编译过里面的各种例程而安装了Visual Studio来测试,就那一次的痛苦经历来说,要怪自然首先是怪自已的基础和水平不足,不过就算是在Visual Studio的C++下,想顺利地编译过例程,编译和链接环境的设置就是一件“巫术般复杂”的事情。至今,仍然可以看到各位DirectX,当然,这里先特指DirectShow开发的各位新人们在CSDN之类的论坛里不胜其烦地在向陆其明大侠请教关于DirectShow编译链接环境的配置。

因此,我个人认为,下一个标准DirectX SDK来看一看,是一个可选的过程,特别只是BCBer来说,装MS 的DX9SDK,只有一个原因,为是用来参考。

第二个办法就是去下已经为BCB定制好的DX9SDK,这是一个缩减过,由C++爱好者无私地共享出来的专为BCB定制好的DX9SDK:

DX9SDK For Borland C++ Builder 下载

感谢Victor Chen的无私贡献,为我类BCBer菜鸟有这么好的东东用。

就算是下载了这个SDK,还是有一定的定制工作要做的。

首先就是依照Victor Chen在他的网页里说明的办法,修改BCB工程环境中的头文件搜索路径和库文件路径的环境,让BCB工程可以优先找到下载后解压的各个源代码文件和链接时需要的库文件。

这个时候就可以在自已的源代码中使用

#include <dshow.h>
#include <streams.h>

来得到DirectX SDK中各种类、接口、常量、结构等的声明了。

关于DirectShow,陆其明大侠有书说得更多,我只是提一下关于开发环境的编译和配置过程中我遇见过的问题:

在链接时找不到一些GUID,如MEDIATYPE_Video、FORMAT_VideoInfo这一类东东的符号链接,会报出:
[Linker Error] Unresolved external '_MEDIATYPE_Video' referenced from X:/........OBJ
[Linker Error] Unresolved external '_FORMAT_VideoInfo' referenced from X:/........OBJ
这样的错误。

解决办法,一开始我用了笨办法,右键点击自已的源代码里写到了象MEDIATYPE_Video,在弹出菜单里使用Find Declaration来找到它的定义,然后把找到的:
OUR_GUID_ENTRY(MEDIATYPE_Video,
0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
抄到自已的头文件里,改成
static GUID gMEDIATYPE_Video = {
0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 };

然后再也不用MEDIATYPE_Video了,自已的代码里就改成用gMEDIATYPE_Video。

后来才发现这真是一个绝笨的办法。不知道为什么,BCB的链接过程中,并没有去链接已经包涵了这些符号的库文件(.lib),结果现在我的办法是,不用管它了,在BCB当前的工程里,选择“Project”菜单下的“Add to project”功能,直接把要用的这个库文件(amstrmid.lib)找到,并加入到工程中参与链接,问题就解决了。也许吧,把这些库文件直接复制到BCB默认的库文件目录下,不知道会不会更容易,总而言之,这可能还是一个非正确的解决办法,或是说仍旧是很笨。

最后不得不提一下陆其明大侠,在CSDN的流媒体专栏里,他解答了很多问题,最早接触DirectShow开发时,看到的资料也是他共享发布出来的,后来陆大侠还著书立说,CSDN里也有些看不习惯他的高手,发贴子批他发表的内容技术含量低,不过我个人认为,他整理和提供的技术资料,还是帮助了大量包括我在内的初接触这些内容的人的,同时也觉得比起那些不负责任地转载错误资料来误人子弟的抄袭者来说(这个在Linux社群里尤为常见),他的治学态度令人敬佩。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: