directshow使用说明_ug对电脑的配置要求

directshow使用说明_ug对电脑的配置要求另外,DirectX9.0c已经将DShow分离出去了,下载时请选DirectX9.0b或者一下再是配置DirectShow的VC开发环境一.第一步,设置INCLUDE及LIB目录 在把dxsdk中提供的baseclass编译通过后,用四种方式编译,会分别生成四个lib,一般只用到了 其中的Debug和Release文件,在tool|option|vc++dir

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用
另外,DirectX9.0c已经将DShow分离出去了,下载时请选DirectX9.0b或者一下




再是配置DirectShow的VC开发环境




一. 第一步,设置INCLUDE及LIB目录 




在把dxsdk中提供的baseclass编译通过后,用四种方式编译,会分别生成四个lib,一般只用到了 




其中的Debug和Release文件,在tool|option|vc++ directories中包含的files中设置如下。


这里需要加入得include files有四种:


D:\SDK\DXSDK\Include


D:\SDK\DXSDK\Samples\C++\DirectShow\BaseClasses


D:\SDK\DXSDK\Samples\C++\DirectShow\Common


D:\SDK\DXSDK\Samples\C++\Common\Include (这里可能是Common)


(接下来才是VC原来的) 




在后边的library files中也需要增加三到四种的文件:


D:\SDK\DXSDK\Lib


D:\SDK\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug (基类编译前,这两个可以不设置)


D:\SDK\DXSDK\Samples\C++\DirectShow\BaseClasses\Release


(接下来才是VC原来的) 




二. 第二步,编译BaseClasses基类 




本人使用的是VS2008,要使用DirectShow进行编程,需要对环境进行必要的配置。


第一步:对dssdk中的baseclass.sln进行编译,生成需要的debug和release文件,具体步骤如下 







在VS6中,安装DirectShow9c版本之后,直接打开BaseClass中的Vc6工程baseclasses.dsw文件, 




直接编译即可,编译Debug Release Debug_Unicode Release_Unicode四个版本,都需要进行 




额外的设置(头文件或者链接库目录设置)。


DirectShow的BaseClass中已经带了VS2005的工程文件baseclasses.sln,在vs2005中打开此文件 




,提示你进行必要的工程转换,转换之后开始编译,编译过程一般会出现下面两个问题:


(1)C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : 




error C2146: syntax error : missing ‘;’ before identifier ‘PVOID64’


(2)error C4430: missing type specifier – int assumed. Note: C++ does not support 




default-int


(3)error C2065: ‘Count’ : undeclared identifier


第一类问题的解决:project->BaseClasses properties->configuration->C/C++ -> General- 




>Additional Include Directories里面的内容(.,..\..\..\..\include)删掉,重新编译, 




PVOID64的错误消失,原因如下:


POINTER_64 是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(Microsoft 




Visual Studio 8\VC\PlatformSDK\Include\basetsd.h(23):#define POINTER_64 __ptr64),但 




DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错,只需要改变include 




files的优先级即可。。当然,也可以改写winnt.h中的代码,将


typedef void *PVOID;


typedef void * POINTER_64 PVOID64;


改成


typedef void *PVOID;


typedef void * POINTER_64;


typedef void * PVOID64;


第二类问题的解决:错误发生在:operator=(LONG);函数定义中,这是因为在VC6中,如果没有显 




示的指定返回值类型,编译器将其视为默认整形;但是vs2005不支持默认整形,解决这个问题不 




能修改每个没有显示指示返回值类型的函数地方,可以用wd4430来解决;具体的在工程选项中的 




c++/Command Line中添加/wd4430即可。


第三个错误发生在for循环中,vc6中for循环中定义的变量相当于在for外面定义,可以在for之外 




地方使用;但是vs2005for循环中定义变量相当于域{}变量,只能在for循环中使用。要解决这个 




问题,可以通过修改vs2005的工程选项:”Project Option” –– “ C++ ” —– 




“Language” — “Force Comformance in For Loop Scrope” 设置为No即可。


完成上面的设置,BaseClass工程基本可以编译通过了。 




三. 第三步,实战DirectShow配置 




(1)使用VC向导生成一个具体项目,如Win32 Dynamic-Link; 


注意字符集设为”未设置“


输出设置为”$(OutDir)\$(ProjectName).ax” 




(2)包含头文件streams.h;


streams.h中间接包含了windows.h,uuids.h,ddraw.h等头文件,所以大多情况下,不需要其 




它头文件。某些情况下,如果编译出现问题,可以加入atlbase.h,initguid.h,stdio.h,stdlib.h




(3)在VC的菜单中选择Project|Settings|C/C++,在弹出的对话框中的Category中选择Code 




generation,然后在Calling convention中选择_stdcall;




(4)使用多线程语言运行时库,即在VC的菜单中选择Project|Settings|C/C++,在弹出的对话框 




中的Category中选择Code generation,然后在Use run-time library中,Debug版选择Debug 




Multithreaded,Release版选择Multithreaded。




(5)配置必要的链接库文件,即在VC的菜单中选择Project|Settings|Link,在弹出的对话框中 




的Category中选择General,然后在Object/library modules中输入如下代码:


Debug版本 strmbasd.lib, msvcrtd.lib, winmm.lib


Release版本 strmbase.lib, msvcrt.lib, winmm.lib


并且选中Ignore all default libraries。(PS:这句有点误导) 


DirectShow SDK建议,DirectShow应用程序应该至少连接库文件strmiids.lib和quartz.lib。前 




者定义了DirectShow标准的CLSID和IID,后者定义了导出函数AMGetErrorText(如果应用程序中 




没有使用到这个函数,也可以不连接这个库)。如果程序里包含了头文件streams.h,则一般库文 




件还要连接strmbasd.lib、uuid.lib、winmm.lib、msvcrt(d).lib


注意:必须设置“忽略所有默认库“为”否“, 否则会出现


DS-Render.def : error LNK2001: 无法解析的外部符号 DllCanUnloadNow


DS-Render.def : error LNK2001: 无法解析的外部符号 DllGetClassObject 




(6)如果按照上述操作仍有如下类似的错误提示 




error LNK2001: unresolved external symbol _CLSID_FilterGraph 




请在link下添加strmiids.lib和quartz.lib,特别是在2003开发环境下应当添加该链接库。因为 




DirectShow SDK建议,DirectShow应用程序应该至少连接库文件strmiids.lib和quartz.lib。前 




者定义了DirectShow标准的CLSID和IID,后者定义了导出函数AMGetErrorText(如果应用程序中 




没有使用到这个函数,也可以不连接这个库)。如果程序里包含了头文件streams.h,则一般库文 




件还要连接strmbasd.lib、uuid.lib、winmm.lib。 




还必须加入 #include <initguid.h> 否则会出现 无法解析的符号 _CLSID_XXXX 




出现下述错误时


error LNK2001: unresolved external symbol “class ATL::CAtlBaseModule 




ATL::_AtlBaseModule” (?_AtlBaseModule@ATL@@3VCAtlBaseModule@1@A ) 




Project|Settings|Link 在Debug下包含atls.lib ,在Release下添加atlsd.lib 库。 




出现下述错误时


c:\microsoft directx 9.0 sdk (summer 2004) 




\samples\c++\directshow\baseclasses\wxdebug.h(329) : error C2146: 语法错误 : 缺少“; 




”(在标识符“m_pString”的前面)


c:\microsoft directx 9.0 sdk (summer 2004) 




\samples\c++\directshow\baseclasses\wxdebug.h(326) : error C2065: “m_pString”: 未声 




明的标识符


请添加如下代码


#include <tchar.h>


#define PTCHAR (TCHAR *) 




 




下面是一些DirectShow入门文章及VC环境配置收藏


介绍Directshow的一些文章链接,放在这里,作为普及读物。 




http://www.learnsky.com/bbs/printpage.asp?BoardID=10&ID=887 




http://tech.sina.com.cn/s/2005-08-18/0933696822.shtml 




http://blog.csdn.net/laiyiling/category/251892.aspx 




还有陆其明老师的博客: 




http://blog.csdn.net/happydeer/archive/2007/04/01/1548426.aspx 




http://jemylu.spaces.live.com/ 




几本书的源代码现在也都可以从如下地址下载到: 



http://www.directshow.cn/forum/viewthread.php?tid=302&extra=page%3D1

[转自]http://blog.163.com/xueyulong1988@126/blog/static/55163238200910259426915/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182987.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • func_get_args()在php71与php56的区别

    func_get_args()在php71与php56的区别

    2021年11月6日
    37
  • pip的安装与卸载「建议收藏」

    前言我个人的理解是,pip是一种工具,可以帮助用户安装卸载一些需要的安装包,非常的简单实用,类似于yum下面介绍的是使用系统自带的python来安装pip。安装方法一sudoaptinstallpython-pip方法二wgethttps://bootstrap.pypa.io/get-pip.py#科学上网pythonget-pip.pypyth…

    2022年4月5日
    58
  • Python 图像处理_图像处理的一般步骤

    Python 图像处理_图像处理的一般步骤Python图像处理基础对我个人而言使用Python图像处理意在取代matlab,集中化使用Python环境保证之后在机器学习和OpenCV的使用上具有一致性,虽然从实验室师兄师姐的口中得知Python的图像处理较之matlab相对复杂(应该只是代码量的问题),但我依然觉得学习python环境比较实用和高效。在进行Python图像处理之前,Pillow是不可或缺的实用性工具,pillow是Py

    2022年10月14日
    2
  • 智能避障小车_单片机智能小车程序

    智能避障小车_单片机智能小车程序      接下来我对所用的模块以及小车的硬件部分做一个讲解        小车的总体效果图如下:      首先是模块简介:            1、首先就是L298N,这是一个经典的电机驱动,相信基本所有玩过单片机,玩过电机的人都使用过,它可以最高容忍15v电压输入,逻辑电平2.4-5.5v,所以使用单片机的3.3v完全可以驱动,它并没有PWM接口来控制电机的速度,只能使逻辑电平输出…

    2022年10月17日
    2
  • 介绍一种非常好用汇总数据的方式GROUPING SETS

    介绍一种非常好用汇总数据的方式GROUPING SETS

    2021年11月26日
    55
  • Java学习书籍整理

    Java学习书籍整理不知不觉中,做Java开发已经四年了,趁着现在换了工作,还算比较闲,就整理一下自己学习的一些知识。在学习过程中,我喜欢找的一些电子书来系统化的学习,多数时候我都只是做一个大概的了解,没有深入学习,基本就是看下目录,看下前几章的内容,深入的只会在实际用的时候才去详细看了。我从以下几个方面整理了一下这些学习的电子书,分享给大家,免得到处去找这些资源,百度脑图里面的分类也…

    2022年6月15日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号