在vs2008+Vista中DirectShow的使用
最近想用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资源管理器怎么使用名称分组筛选文件夹?Vista系统中想要搜索文件夹,可以使用资源管理器来操作,下面我们就来看看详细的教程,需要的朋友可以参考下2019-03-13
桌面窗口管理器 是Vista中的一个新组件:Desktop Window Manager(DWM)。下面小编就带来Windows Vista桌面窗口管理器功能详解供大家了解,一起来看看吧2017-03-21
什么是uac功能?UAC的全称是User Account Control(用户账户控制),它是Windows Vista提供的一个安全特性。而Vista下的UAC功能有什么作用?本文提供Vista下的UAC功能详细2017-03-15
现在还有很多朋友在使用Vista系统,但是Vista系统最近发出警告,提示微软即将停止对Vista支持,4月11日以后系统将不会收到官方的安全更新,下面我们就来看看详细的教程,需2017-02-13- 为了让Windows 10能够替代现有的旧版Windows,其系统要求并不高。除了Windows 8.1设备,现有的Windows 8、Windows 7甚至Vista电脑都可以跑得动Windows 102014-10-20
- 这篇文章主要为大家介绍了Vista中如何通过红外线连接外接设备,Windows Vista操作系统中如何通过红外线连接外接设备呢?本文有具体的步骤,需要的朋友可以参考下2014-09-18
- 索引是对数据库表中一列或多列的值进行排序的一种结构,巧妙的添加新的文件或者位置是保证搜索效率的最好的办法,需要的朋友可以参考下2014-09-17
- Windows Vista的用户遇到了一个问题:铁通的ADSL宽带但是上网不稳定,经常出现815错误的警告,那么该如何解决呢?本文将将您如何解决Windows Vista中815错误,需要的朋友可2014-09-17
- 这篇文章主要为大家介绍了Vista系统中如何隐藏网上邻居,大家都知道网上邻居在默认状态下是照常显示的,有些人不想显示自己的网上邻居,但又不会设置,本文就可以解决你的2014-09-17
- 管Win XP上的很多程序在Vista下都能够运行,但还是有一些虽然能够运行但存在一些问题,或是完全无法运行的程序。那么这样的话你要怎么办呢?本篇文章将详细介绍此问题的解决2014-09-17






最新评论