关于Direct Show 找不到dshow.h的问题

来源:互联网 发布:丝圈脚垫 知乎 编辑:程序博客网 时间:2024/05/16 07:27
试验了几天,看来DirectShow真的是从DirectX中分离出去了,可以装一个DirectX 的Extract的包,里面就是DirectShow,也可以装一个Platform SDK,里面同样也包含DirectShow。

我们的集成开发环境选择了Visual C++ 6.0 With SP6,但默认情况下,它不包括DirectShow的开发包。为此,我专门上微软的网站下载了DirectX SDK(April 2007版),但安装完成后,在编程中依然发现说找不到Dshow.h的头文件。开始以为是环境没配置好,但发现配置好环境后,问题依旧。搜索整个硬盘,确实是不存在这个文件。

查阅相关的资料后,得出以下的结论:现在的DirectShow    SDK 不被整合在DirectX SDK中而是以Extras 的形式发布.DirectShow SDK的最后一个版本是在2005.2版的DirectX SDK Extras中。

也就是说DirectShow从DirectX中分离出去了,需要额外的安装。可以安装DirectX Extras,也可以安装一个Platform SDK,该SDK包含有DirectShow的部分。

安装好后,其实主要是解压释放。我们需要在VC的选项里设置一下。在Tools->Option的选项卡Directories中增加相应项目。在Include files增加DirectX,DirectShow的Include路径,在Library files中增加DirectX,DirectShow的Lib路径。很重要的一点就是这些路径必须要放置在原有库文件路径后面,因为它的搜索顺序是从上到下,因为这些DirectX,DirectShow的库文件中要调用到系统基本的库,但这些库由于在顺序在它们之后,未被初始化,会造成引用错误,切记。

环境配置好之后,开始编程。编写完相关代码后,在运行时出现以下错误:

2007/04/27

--------------------Configuration: MediaPlayer - Win32 (WCE x86) Release--------------------

Linking...

MediaPlayerDlg.obj : error LNK2019: unresolved external symbol _CLSID_FilterGraph referenced in function "protected: void __thiscall CMediaPlayerDlg::OnPlay(void)" (?OnPlay@CMediaPlayerDlg@@IAEXXZ)

MediaPlayerDlg.obj : error LNK2019: unresolved external symbol _IID_IGraphBuilder referenced in function "protected: void __thiscall CMediaPlayerDlg::OnPlay(void)" (?OnPlay@CMediaPlayerDlg@@IAEXXZ)

X86Rel/MediaPlayer.exe : fatal error LNK1120: 2 unresolved externals

Error executing link.exe.



MediaPlayer.exe - 3 error(s), 0 warning(s)

从反馈信息上看,是由于链接库有问题造成的。经过调试,解决办法是要在Project ->Setting里的Link里增加一个库文件:strmiids.lib。