DirectShow VC6.0 开发环境的搭建

今天要用DirectShow做一个音频采集程序,结果遇到的第一个问题便是开发环境的搭建,需要几步准备。

1)下载支持DirectShow的SDK

2)将SDK中的include和lib目录配置到VC6.0下(一般SDK在安装过程中会自己配置)

3)编译SDK中samples中提供的项目,得到Strmbasd.lib winmm.lib库文件,这个要在新建的DirectShow工程中引用

 

第一步,我为了能够开发DirectShow程序,曾想过用VC6.0或者VS2005,只要这两个有一个配置成功了,我便用哪个,因为我对开发环境并不关注。

我先后下载并安装了微软提供的两个SDK,一个是Windows.Server.2003.Platform.SDK.Feb.2003.Edition-QUANTUM,另一个是DXSDK_Aug08。这两个到后来我没有配置成功,所以这里略过,我没配置成功不代表别人就配置不成。

我最后下载了成功配置的SDK,这就是dx9sdk,在百度里搜索“DirectX9.0b SDK Summer 2003”应该可以搜到并下载。安装之后,果然有这个目录:<SDK root>/SAMPLES/C++/DirectShow/BASECLASSES

下面,进入第二步。

第二步,打开VC6.0

Tools->Options->Directories
Include - 添加<SDK root>/Include
Lib       - 添加<SDK root>/Lib
            - 添加<SDK root>/SAMPLES/C++/DirectShow/BASECLASSES/DEBUG  //这个目录在第3步之后会出现的

第三步,对于<SDK root>/SAMPLES/C++/DirectShow/BASECLASSES的编译,我要转引网上一篇我十分感激的文章:

转引开始:

 

我也是个初学者,要是以下的文章有什么错误,请给我留言,谢谢!

[1] 请确保您的机子上已经安装了VS 2005和DirectX 9.0b SDK。DX9.0 SDK的下载地址就不写了,自己在网上找吧!(我的DX9.0安装在D盘根目录下)

[2] 首先编译SamplesC++DirectShowBaseClasses目录下的baseclasses.sln以得到两个库文件(strbase.lib和strmbase.lib)。以下介绍的主要是如何修改编译中的错误,这也是众多文章中没有叙述的部分。自己写的,有些啰嗦,请原谅哦!

    进入DirectShow的安装目录,找到SamplesC++DirectShowBaseClasses,双击baseclasses.sln打开该解决方案。首先看到的会是Visual Studio的转换向导,不用管它,直接Next到Finish。

    点击F5,调试运行,你会见到下面的错误(至少我编译的时候就是这样的结果):

    1>------ Build started: Project: BaseClasses, Configuration: Debug Unicode Win32 ------
    1>Compiling...
    1>dllentry.cpp
    1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'
    1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(222) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(5940) : error C2146: syntax error : missing ';' before identifier 'Buffer'
    1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1>d:DXSDKSamplesC++DirectShowBaseClassesctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1>d:DXSDKincludeuuids.h : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
    1>Build log was saved at "file://d:DXSDKSamplesC++DirectShowBaseClassesDebug_UnicodeBuildLog.htm"
    1>BaseClasses - 6 error(s), 1 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

    没办法,改错。(网上老外的文章中说过,不过也不明白什么意思!

    双击1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'   跳转到出错的位置。

    你会见到错误语句:typedef void * POINTER_64 PVOID64;

    这样的定义,VS2005中是不支持的。将其修改为两条语句:

    #define POINTER_64 __ptr64

    typedef void *PVOID;
    typedef void *POINTER_64 PVOID64;

    然后调试运行,会发现还有1条错误:

      1>------ Build started: Project: BaseClasses, Configuration: Debug Unicode Win32 ------
      1>Compiling...
      1>dllentry.cpp
      1>d:DXSDKSamplesC++DirectShowBaseClassesctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
      1>d:DXSDKincludeuuids.h : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
      1>Build log was saved at "file://d:DXSDKSamplesC++DirectShowBaseClassesDebug_UnicodeBuildLog.htm"
      1>BaseClasses - 1 error(s), 1 warning(s)
      ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

    只有继续改啦!双击1>d:DXSDKSamplesC++DirectShowBaseClassesctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 跳转到出错的位置。

    你会见到错误语句:operator=(LONG);

    只是没有返回值嘛!给它加一个就行了,将其改为:LONG operator=(LONG);<

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值