帮您安装调试成功VS2008平台下的Directshow 及基于directshow的相关项目基础配置错误解决

转载网址:http://wenku.baidu.com/view/f1f33c16c5da50e2524d7fa8.html



知识普及:

DirectX9.0b(包含b)以下版本才有directshow,自从DirectX9.0c以后就从DirctX中分离了directshow了,所以要用directshow的人要注意,当然你也可以下载安装extras扩展包来弥补这一缺省。

 

从网上下了DirectX 9.0 SDK,运行里面的的BaseClasses的时候出现了N多错误,在网上找到了相应的方法。http://blog.csdn.net/cocolovelove/article/details/3532583

   1.编译基类源代码

  BaseClasses编译生成

路径:<DXSDK>/Samples/C++/DirectShow/BaseClasses

环境:VS2005/VS2008

为了正确编译,需修改以下文件:

(a) ctlutil.h

D:/DXSDK/Samples/C++/DirectShow/BaseClasses/ctlutil.h

 

编译时提示错误:

BaseClasses/ctlutil.h(278) : error C4430:缺少类型说明符 - 假定为 int。注意: C++不支持默认 int

 

 修改:

    //operator=(LONG); //原代码

    COARefTime& operator=(LONG);

 

    改完这个之后,出现一堆错误,一个一个来改。

 

(b) wxdebug.cpp

d:/DXSDK/Samples/C++/DirectShow/BaseClasses/wxdebug.cpp

 

错误:

1>./wxdebug.cpp(567) : error C4430:缺少类型说明符 - 假定为 int。注意: C++不支持默认 int

改:

        //staticg_dwLastRefresh = 0;

        staticDWORD g_dwLastRefresh = 0; //lspmodify

 

(c) winutil.cpp

d:/DXSDK/Samples/C++/DirectShow/BaseClasses/winutil.cpp

 

错误:

1>./winutil.cpp(2104) : error C2065: “Count”:未声明的标识符改:

    //for (UINT  Count = 0;Count <Result;Count++) 

    UINT Count; //lspmodify

   for (Count = 0;Count < Result;Count++) {//lspmodify

 

(d) outputq.cpp

d:/DXSDK/Samples/C++/DirectShow/BaseClasses/outputq.cpp

 

错误:

1>./outputq.cpp(664) : error C2065: “iDone”:未声明的标识符改:

这里可能地方与VS报错不一样,需要自己向上找一下

     //for (long  iDone = 0;

long iDone; //lspmodify

for (iDone = 0; //lspmodify

 

DirectShow 8.0SDK里面就看到有下面的头文件,在我装的是9.0的,没有找到这些文件。所以编译的时候修改完上面的就可以通过了。但要是装8.0的话就要修改了。

(我是到这部截至了因为我下载的是DirectX9.0b extras,所以如果您与我相同请先向看蓝字部分)

2、头文件修改

(a) winnt.h

d:/Program Files/Microsoft Visual Studio8/VC/PlatformSDK/include/winnt.h

 

在该文件头部添加:

#define POINTER_64 __ptr64 // add by peter lee

 

(b) vmr9.h

D:/DXSDK/Include/vmr9.h

       MixerPref9_RenderTargetRGB     = 0x1000,

      MixerPref9_RenderTargetYUV      = 0x00002000, //lspadd

 

3VS2005/VS2008环境配置(一样的所以就以2008为例)

vs2008下,选择菜单 Tools -> Options,左栏选择Projectsand Solutions -> VC++ Directories 

在弹出的对话框的"Show directories for"(显示以下内容的目录)中选择Include files(包含文件):

- include:

<DXSDK>/Include

<DXSDK>/Samples/C++/Common/Include

<DXSDK>/Samples/C++/DirectShow/BaseClasses

<WMSDK>/WMFSDK9/include

...

再在"Show directories for"中选择 Librariesfiles(库文件):

- lib:

<DXSDK>/lib

<DXSDK>/Samples/C++/Common/Src

<DXSDK>/Samples/C++/DirectShow/BaseClasses/Debug_Unicode

//如果没有编译BaseClasses不会出现这个文件选项

<DXSDK>/Samples/C++/DirectShow/BaseClasses/Release_Unicode

<WMSDK>/WMFSDK9/lib

 

 修改完成啦,哈哈~~~编译通过了~~DirectX9.0只需要做第一步修改就可以了,但8.0就要三步都做完~~~晕倒~~

 

如果以上修改已经解决你的问题那么恭喜你,如果编译出现下图情况,那么恭喜你也成功了,只不过因为你编译的是lib.h项目,你应该设置类似capture项目为启动项目,继续您后续的编程。

如果后续编程出问题,请向下看

(Debug_Unicode版)

缺少streams.h的解决方法和DirectShow开发环境的搭建

 

这个问题困扰我两天了,这是在参考了很多Debug 和Realse 版本的缺少streams.h的方案后,经过大胆尝试后,我是第一个用Debug_Unicode版解决缺少streams.h问题的方法(至少我那时还未看到过有关这方面的详细解决方案),

现在拿出来供有需要的像做视频开发方面的人提供参考,绝对可以帮你省很多时间来处理有关DirectShow开发环境的搭建.

1)     安装directX 9.0bsdk ,我安装在C盘下的DXSDK

2)     打开安装目录下的baseclasses.dsw,进行编译

其中第(2)是最重点的,下面我就主要详细说明这步的操作过程

1.       首先在baseclasses工程project-setting-library下设置output filename,设置为Debug_Unicode\strmbasd_uni.lib,默认的为Debug_Unicode\strmbasd.lib。(这部我没做)

2.       编译工程,编译后会生成Debug_Unicode目录,里面就含有我们要的strmbasd_uni.lib库。把它拷贝到你所要的项目工程目录下即可。(这部我也没做)

3.       在你所在的工程中,打开project-setting-link的Object/library modules下添加如下几个库名,strmbasd_uni.lib strmiids.lib winmm.lib  //这部我做了,这个VSVC++不同VS2008是在右击启动项目——属性——链接(LINK)——输入中的依赖附加项中添加的

 

3)在VC++的Tools/Option/Directory的Include和Library中分别加入
C:\DXSDK\Include
C:\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES
C:\DXSDK\SAMPLES\C++\COMMON\INCLUDE//我的工程中COMMON没有include,我直接添加到C:\DXSDK\SAMPLES\C++\COMMON 也成功了

C:\DXSDK\Lib
C:\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES\ Debug_Unicode  (*)
4)在编译你工程前,在Project\Setting\Link\ 中加入 strmbasd_uni.lib uuid.lib winmm.lib

 

 

如果出现:dsound.h": No such file or directory

则在vs目录下搜索添加到工程include目录下

(着重强调你的VS2008中的windsk必须安装的比较完整,否则会缺少很多东西,如果没有在你的VS2008中的安装包搜索,找到补丁安装即可)

 

 

 (以下参考

http://www.cnblogs.com/pcmax/archive/2008/11/22/1338989.html
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2617687&SiteID=1

)

如果出现:

 

dxtrans.h": No such file ordirectory

#define__IDxtCompositor_INTERFACE_DEFINED__
#define __IDxtAlphaSetter_INTERFACE_DEFINED__
#define __IDxtJpeg_INTERFACE_DEFINED__
#define __IDxtKey_INTERFACE_DEFINED__
#include <Qedit.h>

 

 

再修改qedit.h中引用 dxtrans.h的部分,要求注释掉
#include "oaidl.h"
#include "ocidl.h"
//#include "dxtrans.h"
#include "amstream.h"

注意:这样就可以正常编译连接了,如果以前的的程序还是不行,则 rebuild all 一下即可

 

 

希望我的整理对您有帮助,我调了两天,把directX的发展和VS2008的基本配置都弄的比较清楚了感觉收获很大。如果还有问题也欢迎邮箱mysteryrat@126.com探讨

 O(_)O哈哈~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值