优化大师全新一代!   魔方3系!
当前位置:首页 >> Vista应用 >> Vista激活

开发编程:DirectShow在vs2008+Vista中的使用


2009年4月22日 编辑:Vista之家 - vista123.com 人气: 评论:5

Vista之家www.vista123.com):开发编程:DirectShow在vs2008+Vista中的使用

最近想用OpenCV库进行视频处理,但十分不幸的是新买的笔记本装的是Vista,对网络摄像机只能用DirectShow*方式控制,而不能用在XP里还能使用的vfw方式,而大多数OpenCV的例程都用vfw方式实现的,得自己去转变成 DirectShow的方式。当然了,DirectShow 也将要被Media Foundationt淘汰了。但分析一下,在XP/ Vista/ Windows7 时代还是会被保留的。

DirectShow在DirectX9.0b之前都包括在这个库中,在DX9.0c开始,则被独立成库,要另外安装**。(注,在XP(sp2)中默认安装了DX9.0c而Vista默认安装了DX10。)后来MS又把DirectShow放入了WindowsSDK中。在vs2008 中的 WinSDK6.0a 已经包含了DirectShow,但在vs2005中的WinSDK则没有。

由于懒得重装XP系统,所以就直接给本本装了个vs2008,尝试使用DirectShow。在http://www.opencv.org.cn/index.php/%E4%BD%BF%E7%94%A8DirectShow%E9%87%87%E9%9B%86%E5%9B%BE%E5%83%8F 中下载了个例程,解压,打开工程文件,F5直接编译,接着~~~~

碰到了经典的 error C2146: syntax error : missing ';' before identifier 'PVOID64' 错误。上网查了好久,终于明白就是库连接有问题,找不到相应的.h文件,解决方法就是装DX(和DS),和改头文件连接路径。看了看,项目的目录,发现,在Debug目录下已经有个叫DirectShow的目录,里面已经包含了相关的头文件和库文件了。而vs2008已经把WinSDK安装好了,就是说DS也已经安装好了。但是由于原配的DirectShow目录中的文件是针对DX9的DS,而实际Vista中安装的是DX10和WinSDK6.0a,所以编译出错。
因此,在Project->Settings->Settings for:(All configurations)的C/C++和Link中,把所有的DirectShow/Include,变成 $(FrameworkSDKDir)Include;把所有的DirectShow/Lib,变成 $(FrameworkSDKDir)Lib。
改动的有:
...C/C++->Common->Additional include directories
...Link->Common->Additional library directories

检查编译命令,看看是否已经包括新的目录。

F5,再次编译。

还是告诉在...\DirectShow\Include\dxtrans.h 头文件中,不能打开d3d.h。在次看看d3d.h 在啊,但认真看看只是在原配的DirectShow目录中,而新的WinSDK6.0a没有,那这么办???
咦~~~!怎么还是在原来的DirectShow目录找dxtrans.h,看看文件CameraDS.h:
#include <atlbase.h>
#include "DirectShow/Include/qedit.h"
#include "DirectShow/Include/dshow.h"
#include <windows.h>
#include <cxcore.h>

啊,得把引用 "DirectShow/Include/qedit.h" 改成 <qedit.h> ,把引用 "DirectShow/Include/dshow.h" 改成 <dshow.h>。 存盘后,编译,再次出现错误:

1>CameraDS.cpp
1>c:\program files\microsoft sdks\windows\v6.0a\include\qedit.h(498) : fatal error C1083: File (Include) can not open: "dxtrans.h": No such file or directory

一查看,没在WinSDK的目录上找到dxtrans.h,上网一查,新的DS不在包含这个文件。上网找到了解决方案。
http://www.cnblogs.com/pcmax/archive/2008/11/22/1338989.html
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2617687&SiteID=1

现在采用的是第二种方法:

在调用 包含qedit.h 的命令前加入四句:
#define __IDxtCompositor_INTERFACE_DEFINED__ 再修改qedit.h 中引用 dxtrans.h 的部分,要求注释掉
#include "oaidl.h"
#include "ocidl.h"
//#include "dxtrans.h"
#include "amstream.h"

再编译运行,成功!! 选择设置摄像头,视频显示,点击q键,退出。

参考:

*DirectShow: http://msdn.microsoft.com/en-us/library/ms783323(VS.85).aspx
**DirectX(Feb 2005): http://dev.csdn.net/article/62/62941.shtm

#define __IDxtAlphaSetter_INTERFACE_DEFINED__

#define __IDxtJpeg_INTERFACE_DEFINED__

#define __IDxtKey_INTERFACE_DEFINED__

#include <qedit.h>

Vista之家www.vista123.com),爱上网,爱上Vista123.com

      
Vista之家网友 (122.193.85.*) 于 2009-10-12 23:15:56 发表下列评论:   [删除]
很好,正在学习opencv呢,很有用
Vista之家网友 (59.37.138.*) 于 2009-4-22 18:21:00 发表下列评论:   [删除]
编者真行啊.
Vista之家网友 (221.225.45.*) 于 2009-4-22 15:36:23 发表下列评论:   [删除]
支持楼上2位,这样的文章要是放在之家的论坛上,应该还是不错的
Vista之家网友 (61.185.200.*) 于 2009-4-22 13:03:56 发表下列评论:   [删除]
是啊,这种文章有必要放在首页新闻上吗?看得懂的又有多少人
Vista之家网友 (119.39.49.*) 于 2009-4-22 10:53:58 发表下列评论:   [删除]
这个大多数人看不懂 你发了有意义么?
发表评论(最新评论将在5分钟内出现
昵称:
内容:
(按Control+Enter直接提交)   点击一下,Vista问题有问必答
Vista优化大师
闪游 - 最快最强最安全的网络浏览器
windows7 优化大师
酷点,酷点桌面

Windows 下用什么杀毒软件最好最安全?
Windows 系统上网更加可靠
把您的Windows系统打造成一个铜墙铁壁之完全攻略

新手玩转Windows系统速成大法
从入门到精通,Windows听我指挥
做Windows 高手并不难,怎么学?

最便宜的装Win7的名牌电脑多少钱?
预装Win7的品牌机大PK
联想、戴尔、索尼等笔记本大促销

如何免费升级到 Windows 7?
戴尔推出免费教程教你升级Win7
安装升级Windows 7,其实就这么简单!

索尼 Win7 笔记本电脑1999元特价热销
七天免费试用?免费升级内存硬盘?
更有超多礼物发送中,不抢白不抢

Win7系统出现问题怎么办?
电脑有故障,“医生”来帮忙
我有电脑医生,修复电脑简单轻松!

热门文章
软媒旗下软件闪游,最好用的浏览器 | 魔方优化大师 | 酷点,美美的桌面 | Windows7优化大师 | Windows8优化大师 | Vista优化大师 | Vista一键还原 | 魔法IE
软媒旗下网站6655网址之家 | 9955网址大全 | IT之家 | Win8之家 | Win7之家 | Vista之家 | 乐购网 | Win8/Win7论坛