1、首先下载DirectX 9 SDK开发包。这个现在还是比较难搞到的,可以到微软官网上去下载。在《关于DirectShow的杂想》一文中介绍过,自从DirectX 9.0c sdk后,DirectShow SDK不再包含在DirectX SDK中,而是以Extras的形式发布,后来集成了一部分SDK到Windows SDK中,也就是说后来的环境(比如vs2005、vs2008环境下)比较难配置,极有可能不稳定,产生这样那样的错误。初学者可能看到如此难搞的环境配置就望而却步了,不利于学习。所以还是在VC6.0或者VC++2003环境下配置DirectX 9.0 SDK。以下是几个包含DirectShow SDK的DirectX SDK的下载地址,是在我的SkyDirive里的共享文件。
①DirectX 9.0 SDK:
http://cid-a76c4a4a3032ded0.skydrive.live.com/browse.aspx/.Public/DirectX%209.0%20SDK
②DirectX 9.0b SDK:
http://cid-a76c4a4a3032ded0.skydrive.live.com/browse.aspx/.Public/DirectX%209.0b%20SDK
③DirectX 9 sum_2004(2004年夏天更新的版本):
http://cid-a76c4a4a3032ded0.skydrive.live.com/browse.aspx/.Public/DirectX%209.0%20SDK%5E_sum2004
2、编译 StrmBasd.lib/StrmBase.lib。打开SDK\Samples\C++\DirectShow
\BaseClasses\baseclasses.dsw 编译 debug/ release 版本,则会得到相对应的 strmbasd.lib/ strmbase.lib ,把他们复制到 SDK\lib 目录下。
注意,可能SDK里的这个baseclasses工程里的默认配置是Debug_Unicode。要改成Debug/Release。方法:在工具栏上右击鼠标,选择组建,就可以选择配置。
3、环境设置:
VC Menu: Tools->Options:
①、设置 include path: 把 SDK\INCLUDE 以及 SDK\SAMPLES\C++\
DIRECTSHOW\BASECLASSES 放到 include 路径顺序最前边;
②、 设置 lib path: 把 SDK\LIB 放到 lib path 最前边。
4、问题解决:
在编译samples里的ASFCopy例子里,编译提示找不到wmstub.lib。可以到我的skydrive里下载该lib(http://cid-a76c4a4a3032ded0.skydrive.live.com/browse.aspx/.Public/wmstub.lib);将wmstub.lib复制到...\Samples\C++\DirectShow\Common里。再编译,就OK了。
在编译dsnet例子里,编译提示: C:\DXSDK\Samples\C++\DirectShow\Filters\DSNetwork\filter\..\sender\propsend.rc(24) :
致命错误RC1121: RC : fatal error RC1121 : I/O error reading file
在Zhong Liyuan的博客里找到了解决方法。
这是关于多国语言转换的问题,原来的程序是英文版,在中文版里面就有这个问题。因为在Microsoft Windows 下,语言用代 码 页来识 别,不同 语言 用不同代码 页来表示, 如" 简体中文" 用代码页936 表示, 而" 美国英 语" 则 用代码页1252 表 示。
解决方法:把英文版本改为中文版本。
打开...\DXSDK\Samples\C++\DirectShow\Filters\DSNetwork\filter,在这里有一个资源文件filter.rc,打开查看,可看到:
// Include the resources for the sender and receiver libraries
#include "..\sender\propsend.rc"
#include "..\receiver\proprecv.rc"
分别用文本文档打开上述两个资源文件(注意一定是文本文档哦!)
找到下面一段代码:
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma co
#endif //_WIN32
将两个资源文件里的上述部分全部替换为成:
// Chinese (P. R. C.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma co
#endif //_WIN32
重新打开项目文件编译就ok了!!(这里谢了zhongliyong88师姐。)