风云天下会攻略范文第1篇
知识普及:
DirectX9.0b(包含b)以下版本才有directshow,自从DirectX9.0c以后就从DirctX中分离了directshow了,所以要用directshow的人要注意,当然你也可以下载安装extras扩展包来弥补这一缺省。
缺少streams.h的解决方法
从网上下了DirectX 9.0 SDK,运行里面的的BaseClasses的时候出现了N多错误,在网上找到了相应的方法。http://blog.csdn.net/cocolovelove/article/details/353258
31. 编译基类源代码
BaseClasses编译生成
路径:/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
改:
//static g_dwLastRefresh = 0;
static DWORD g_dwLastRefresh = 0; //lspmodify
(c) winutil.cpp
d:/DXSDK/Samples/C++/DirectShow/BaseClasses/winutil.cpp
错误:
1>./winutil.cpp(2104) : error C2065: “Count”: 未声明的标识符改:
//for (UINTCount = 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 (longiDone = 0;
long iDone; //lspmodify
for (iDone = 0; //lspmodify
在DirectShow 8.0的SDK里面就看到有下面的头文件,在我装的是9.0的,没有找到这些文件。所以编译的时候修改完上面的就可以通过了。但要是装8.0的话就要修改了。
(我是到这部截至了因为我下载的是DirectX9.0b extras,所以如果您与我相同请直接向下看蓝字部分)
2、头文件修改
(a) winnt.h
d:/Program Files/Microsoft Visual Studio 8/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, //lsp add
3、VS2005/VS2008环境配置(一样的所以就以2008为例)
在vs2008下,选择菜单 Tools -> Options,左栏选择Projects and Solutions -> VC++ Directories
在弹出的对话框的"Show directories for"(显示以下内容的目录)中选择Include files(包含文件):文件路径看你自己安装的directshow位置
- include:
/Include
/Samples/C++/Common/Include
//我的工程中COMMON没有include ,我直接添加到C:DXSDKSAMPLESC++COMMON也成功了 /Samples/C++/DirectShow/BaseClasses
/WMFSDK9/include//这个我没加也可以
...
再在"Show directories for"中选择 Libraries files(库文件):
- lib:
/lib
/Samples/C++/Common/Src
/Samples/C++/DirectShow/BaseClasses/Debug_Unicode
//如果没有编译BaseClasses不会出现这个文件选项
/Samples/C++/DirectShow/BaseClasses/Release_Unicode
/WMFSDK9/lib//这个我没加也可以
修改完成啦,哈哈~~~编译通过了~~ DirectX9.0 只需要做第一步修改就可以了,但8.0就要三步都做完~~~晕倒~~
如果以上修改已经解决你的问题那么恭喜你,如果编译出现下图情况,那么恭喜你也成功了,只不过因为你编译的是lib和.h项目,你应该设置类似capture项目为启动项目,继续您后续的编程。
如果后续编程出问题,请向下看
(Debug_Unicode版)
缺少streams.h的解决方法和DirectShow开发环境的搭建
这个问题困扰我两天了,这是在参考了很多Debug 和Realse 版本的缺少streams.h的方案后,经过参考尝试后,获得了成功,现在拿出来供有需要的像做视频开发方面的人提供参考,绝对可以帮你省很多时间来处理有关DirectShow开发环境的搭建.重新配置一下include和lib以确保正确
1) 安装directX 9.0b sdk ,我安装在C盘下的DXSDK
2) 打开安装目录下的baseclasses.dsw,进行编译
其中第(2)是最重点的,下面我就主要详细说明这步的操作过程
1. 首先在baseclasses工程project-setting-library下设置output file name,设置为
Debug_Unicodestrmbasd_uni.lib,默认的为Debug_Unicodestrmbasd.lib。(这部我没做)
2. 编译工程,编译后会生成Debug_Unicode目录,里面就含有我们要的strmbasd_uni.lib
库。把它拷贝到你所要的项目工程目录下即可。(这部我也没做)
3. 在你所在的工程中,打开project-setting-link的Object/library modules下添加如下几
个库名,strmbasd_uni.libstrmiids.lib winmm.lib//这部我做了,这个VS与VC++不同VS2008是在右击启动项目——属性——链接(LINK)——输入中的依赖附加项中添加的
3)在VC++的Tools/Option/Directory的Include和Library中分别加入
C:DXSDKInclude
C:DXSDKSAMPLESC++DIRECTSHOWBASECLASSES
C:DXSDKSAMPLESC++COMMONINCLUDE//我的工程中COMMON没有include ,我直接添加到C:DXSDKSAMPLESC++COMMON也成功了
C:DXSDKLib
C:DXSDKSAMPLESC++DIRECTSHOWBASECLASSES Debug_Unicode(*)
4)在编译你工程前,在ProjectSettingLink 中加入 strmbasd_uni.lib uuid.lib winmm.lib
如果出现:dsound.h": No such file or directory
则在vs目录下搜索添加到baseclasses工程include目录下
(着重强调你的VS2008中的windsk必须安装的比较完整,否则会缺少很多东西,如果没有在你的VS2008中的安装包搜索,找到补丁安装即可)
(以下参考
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2617687&SiteID=1
)
如果出现:dxtrans.h": No such file or directory
则在整个工程中查找#include 的引用处做修改:
在#include 前加四项:
#define __IDxtCompositor_INTERFACE_DEFINED__
#define __IDxtAlphaSetter_INTERFACE_DEFINED__
#define __IDxtJpeg_INTERFACE_DEFINED__
#define __IDxtKey_INTERFACE_DEFINED__
#include
再修改qedit.h 中引用 dxtrans.h 的部分,要求注释掉
#include "oaidl.h"
#include "ocidl.h"
//#include "dxtrans.h"
#include "amstream.h"
注意:这样就可以正常编译连接了,如果以前的的程序还是不行,则 rebuild all 一下即可
如果出现1>LINK : fatal error LNK1181: 无法打开输入文件“strmbasd_uni.lib”
只能说明你的摄像机的驱动没装好。
希望我的整理对您有帮助,我调了两天,把directX的发展和VS2008的基本配置都弄的比较清楚了感觉收获很大。如果还有问题也欢迎邮箱mysteryrat@126.com探讨