对于刚刚接触 DirectShow 的人来说,安装配置是一个令人头疼的问题,经常出现的情况是最基本的 baseclass 就无法编译。
一开始我也为此费了很大的功夫,比如说修改代码、修改编译选项使其编译通过。因为大家 Visual Studio 的版本与 DirectShow 的版本各不相同,导致问题多种多样。网上的参考也不可尽信,往往花费了大量的时间和精力,程序仍没有编译通过,而丧失学习 DirectShow 的兴趣和信心。
我在 Visual Stdio 6.0,2003,2005,2008 都尝试过了配置 DirectShow,基本可以达到不需要修改代码就可以编译通过。经验就是,要配合 Visual Studio 的版本选择不同的 DirectShow 的版本。一般来说,要选取 比同时期的 Visual Studio 略晚发行的 DirectShow 版本。(我觉得,微软至少要对新发行的 DirectShow SDK 在当前主流的编译环境中测试才对,所以一般这种匹配都是很容易一下子编译通过。)
Visual C++ 6.0
陆其明老师的《DirectShow 开发指南》是一本不错的书,使用的环境就是 VC 6.0。按照我刚才的理论,几乎所有的 DirectShow 版本都可以容易的安装在 VC 6 上,因为它太古老了。不过,要是安装最新的 SDK 反而不行,因为 VC 6 的编译器问题很多,对标准支持得也不是很好,所以导致最新的 SDK 无法编译。
陆的书上所用的版本其实是 dx9sdk.exe (2002.12.19),我这里给出的是微软官方的链接(他们把所有的版本都保留了),需要正版验证才能下载(应该不成问题吧...)。
我建议使用 DirectX SDK Summer 2004 版本,这个版本是最后一个整合 DirectShow 的 DirectX SDK版本。
之后微软把 DirectShow 分离出来了,比如需要安装 DirectX SDK April 2005 版本再加上 DirectX SDK February 2005 Extras。也就是说,DirectX 已经不含 DirectShow,这个时候(2005年)它被包含在 Extras 里面。所以安装了 Extras 基本上就可以进行 DirectShow 开发了。
Visual Studio 2003
这个版本建议安装 Summer 2004 这个版本。Extras 也没问题。
Visual Studio 2005
这个版本我用的不是很多,印象中安装 Summer 2004 没问题,甚至更低的 9.0b 也没问题。安装很新的版本就会出现我说的那种太超前反而编译不了的现象。
大概到 2006 年,DirectShow 就被包含在了 Windows Platform SDK 中。不知道最新的 Platform SDK 对 VS2005 支持地如何,我没有去试。之前有一个版本需要修改一些代码才能编译。
Visual Studio 2008
非常简单,安装最新版的 DirectX SDK June 2008 和 Platform SDK (2006.03.15) 即可。另外,Platform SDK 的后续版本似乎叫 Windows SDK,内含的 Media Foundation 似乎要取代 DirectShow。(Windows SDK for Windows Server 2008 and .NET Framework 3.5 2008.02.05)
进行环境配置
如果 DirectShow 的版本比 VS 要新,则相应的头文件和库文件就会自动配置,否则就要手动添加。
如果安装的 DirectShow 比较早,那么在 baseclasses 里面就会有相应的工程文件,打开编译即可。如果安装的是 Platform SDK 就会只有一个 makefile,注意到在安装完 Platform SDK 以后,开始菜单会有一些进入不同编译环境的快捷方式,选一个想编译的版本进入,然后在 baseclasses 下 输入 nmake,就会自动编译了。
还需要注意的就是一些库的引用、编译链接的选项等等,在出现问题的时候搜索就行,一般不是大问题。

vc6 下的msdn版本:最后一个支持VS6的版本是2001年10月版;

DirectX SDK:DirectX 9.0 Summer 2004 SDK Update,

下载页面:http://www.microsoft.com/downloads/details.aspx?FamilyID=fd044a42-9912-42a3-9a9e-d857199f888e&DisplayLang=en
这个版本的Direct 9 SDK是不完全支持VC6的,

注意下载页面的Overview:
This download contains all the extra files that are not included in the DirectX 9.0 SDK Summer Update 2004 release such as a d3dx.lib which supports VC 6.0, older plug-ins and Japanese version of the documentation.
即DirectX SDK Summer Update 2004里面附带的d3dx.lib是不支持VC6的,支持VC6的版本在Extras包里面。

还须下DirectX 9.0 Summer 2004 SDK Update Extras(http://www.microsoft.com/downloads/details.aspx?FamilyID=736585e1-10f0-4e85-b940-828cba9971f1&DisplayLang=en),

另如编译时出现了DWORD_PTR或者其他什么类型未定义之类的错误,是因为微软把BASETSD.H从DirectX SDK发行包里拿掉了,这个文件在Platform SDK里有,在VC的Include路径中把Platform SDK的include路径提到最前面就可以了。
Platform SDK,最后一个支持VC6的Platform SDK是February 2003 Edition,
下载:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
DirectX 9.0 Complete Software Development Kit (SDK) :(2002-12-19) 点击下载

DirectX 9.0 SDK Update - (Summer 2004) 点击下载

DirectX 9.0 SDK Update - (August 2005) 点击下载

DirectX 9.0 SDK Update - (February 2005) 点击下载

DirectX 9.0C SDK   的第一个版本是DirectX SDK Summer 2004也是整合有DirectShow SDK 的最后一个版本,这之后面向 DirectX 9.0C用C++开发应用程序没有发生太大变化,以后的版本主要是针对MDX做的改动,如果在VS2003下用C++开发 DirectShow应用程序使 用这个版本最合适.另外Windows XP SP2 中包含的DirectX 的版本就是9.0c ,这也是广泛使用的DirectX版本.Windows SDK 2004版,支持Windows XP SP2及其以前的Windows 但不包含 DirectX SDK.

之后 DirectShow   SDK 不被整合在DirectX SDK中而是以Extras 的形式发布. DirectShow SDK的最后一个版本是在2005.2版的DirectX SDK Extras中, 这之后DirectShow SDK被整合在Windows SDK中 Windows SDK 2005版(支持Windows Server 2003 SP1 及其之前的Windows)中包含有
DirectShow SDK,Windows SDK 2006年3月版(支持Windows Server 2003 R2及其之前的Windows)也包含.

VS2005   中包含有Windows SDK 2005 版,但是没有DirectShow SDK,所以在VS2005中开发DirectShow 应用程序要手工安装DirectX SDK Extras 2005,2 版,和2005年6月之后的DirectX SDK,因为DirectShow 会调用 DirectDraw,DirectSound等,DirectX SDK 从2005.6开始支持VS2005,我使用的是2005.8版,在这之后的 DirectX SDK中,主要多加入了MDX 2 beta 而这个MDX 2 beta在2006.10中取消了,而被一个叫做XNAGS的东西取代了.

Windows SDK for Vista   已经正式发布,DirectShow的示例被更新为VS2005版本, DirectShow 的换代产品是Media Foundation,它将取代DirectShow 就象当年DirectShow 取代   Video for Windows 一样.

DirectX SDK下载页

DirectX SDK Summer 2004 版 下载地址

DirectX SDK Extras 2005,2 版 下载地址

Windows SDK 2006.3 版 for Windows Server 2003 R2 下载地址
这个版本的好处是不含有.net SDK 一张CD-R可以刻下

Windows SDK for Vista 
下载地址1
下载地址2

包含有.net 3 SDK,没有完整的DirectX SDK

XNA Developer Center

2005.2版的DirectX SDK Extras中的示例需要修改一个才可以在VS2005中正常运行,修改列表请看这篇文章.

http://blogs.msdn.com/mikewasson/archive/2005/05/23/some-directshow-samples-break-in-visual-studio-2005.aspx

在 Windows SDK for Vista 中对DirechShow SDK做了一些修改,使之和VS2005结合的很好,所以最稳定的配置是 VS2005 SP1+ Windows SDK for Vista +DirectX SDK 2007.4 虽然有些大.    

DirectX SDK版本与Visual Studio版本的更多相关文章

  1. UE4与Visual Studio版本对应关系

    首先,要注意,Visual Studio 2015(VS2015)默认安装时并不包含 C++ 的工具.在安装 VS2015 时,需选择 自定义 安装并勾选 C++ 组件,这对之后的工作时必须的.如果已 ...

  2. Visual Studio 版本互转工具

    Visual Studio 版本互转工具 http://www.cnblogs.com/flydoos/archive/2011/08/20/2146121.html http://www.cnblo ...

  3. InstallShield 创建 visual studio 工程的时候 指向 任意 visual studio 版本 方法 (修改 计算机 默认 visual studio shell 版本)

    这需要 修改 计算机 默认 visual studio shell 版本 注册表 HKEY_CLASSES_ROOT VisualStudio.DTE 配置节点 描述的是 默认的 visual stu ...

  4. 注册表修改 Devenv 默认启动 Visual Studio 版本

    本人机器上安装了多个版本Visual Studio.目前开发主要使用VS2015,,但每次使用运行->devenv 启动的都是 VS2013.所以不是很方便. 如果VS2013扩展包出问题要使用 ...

  5. visual studio版本 宏

    转载请注明来源:https://www.cnblogs.com/hookjc/ MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013) MSVC++ 11. ...

  6. Intrinsics头文件与SIMD指令集、Visual Studio版本对应表(转)

    File:Intrinsics头文件 描述:指令集描述VS:Visual Studio版本号VisualStudio:Visual Studio版本名 File 描述 VS VisualStudio ...

  7. _MSC_VER值对应的Visual Studio版本

    移步官网查看更多定义 1. 关于 今天使用cmake需要判断_MSC_VER的值是多少,额,官网查了下,还真不少 2. 查看 用下面的代码可以输出宏_MSC_VER的值 #pragma once #i ...

  8. 有关各个版本的Visual Studio(VS)和SQL Server安装的顺序总结

    前几天从网上买了块三星的SSD,把原来的HDD放在了光驱位,然后重新安装了系统.想起来收集储存的好多源代码还是VS2008开发的,然后打算把之前用过的VS2008也装上,安装过程出了点问题.发现安装完 ...

  9. windows 下使用cmake指定visual studio 版本

    https://blog.csdn.net/iceboy314159/article/details/87829950

随机推荐

  1. 分享:json2.js源代码解读笔记

    1. 怎样理解"json" 首先应该意识到,json是一种数据转换格式,既然是个"格式",就是个抽象的东西.它不是js对象,也不是字符串,它仅仅是一种格式,一种 ...

  2. 用Swift完成不同View Controller之间的切换

    之前用objective-c开发时,页面之间的切换很容易.其实用swift没有很大的变化,如果你是用storyboard完成的界面,基本上是同样的方式,只不过在代码部分写成swift风格的就行了. 今 ...

  3. Objective-C KVC 自己主动转换类型研究

    ## Objective-C KVC 自己主动转换类型研究 apple非常厚道,kvc的时候帮我们做了一些类型转换,规律贴出来,给大伙參考參考 @interface Entity : NSObject ...

  4. C#版二维码生成器附皮肤下载

    原文 C#版二维码生成器附皮肤下载 前言 本文所使用的二维码生成代码是谷歌开源的条形码图像处理库完成的,c#版的代码可去https://code.google.com/p/zxing/download ...

  5. android事件传递机制以及onInterceptTouchEvent()和onTouchEvent()详解二之小秘与领导的故事

    总结的不是很好,自己也有点看不懂,正好现在用到了,研究了一个,再次总结,方便大家查看 总则: 1.onInterceptTouchEvent中有个Intercept,这是什么意思呢?她叫拦截,你大概知 ...

  6. SPField的GetValidatedString方法没有被调用

    当我们开发自定义类型的Field时,可能会用到GetValidatedString这个方法. 但是有时候这个方法并没被调用 原因是: 当Field的Value为null时,该方法不会被调用 解决办法: ...

  7. Java:Java快速入门

    链接地址:http://www.cnblogs.com/happyframework/p/3332243.html 你好,世界! 源代码组织方式 Java程序由package+class组成,pack ...

  8. js打印

    js打印,其实是打印当前页面的内容,是调用 系统的js方法,来弹出 打印设置窗口,用法很简单. window.print()就行,有的考虑到 浏览器兼容性问题,会用到document.execComm ...

  9. 关于Get和Post

    get和post 简介: Get和post是表单提交数据的两种基本方式,get请求数据通过域名后缀url传送,用户可见,不安全,post请求数据通过在请求报文正文里传输,相对比较安全. get是通过u ...

  10. TCP与UDP在socket编程中的区别 (网络收集转载)

    http://blog.chinaunix.net/uid-26421509-id-3814684.html 一.TCP与UDP的区别 基于连接与无连接  对系统资源的要求(TCP较多,UDP少)  ...