DirectShow库的编译及VS环境配置

上传人:飞*** 文档编号:32876387 上传时间:2018-02-12 格式:DOCX 页数:5 大小:16.34KB
返回 下载 相关 举报
DirectShow库的编译及VS环境配置_第1页
第1页 / 共5页
DirectShow库的编译及VS环境配置_第2页
第2页 / 共5页
DirectShow库的编译及VS环境配置_第3页
第3页 / 共5页
DirectShow库的编译及VS环境配置_第4页
第4页 / 共5页
DirectShow库的编译及VS环境配置_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《DirectShow库的编译及VS环境配置》由会员分享,可在线阅读,更多相关《DirectShow库的编译及VS环境配置(5页珍藏版)》请在金锄头文库上搜索。

1、一. 第一步,设置 INCLUDE及 LIB目录在把 dxsdk中提供的 baseclass编译通过后,用四种方式编译,会分别生成四个 lib,一般只用到了其中的 Debug和 Release文件,在 tool|option|vc+ directories中包含的files中设置如下。这里需要加入得 include files有四种:D:SDKDXSDKIncludeD:SDKDXSDKSamplesC+DirectShowBaseClassesD:SDKDXSDKSamplesC+DirectShowCommonD:SDKDXSDKSamplesC+CommonInclude (这里可能是

2、Common)(接下来才是 VC原来的)在后边的 library files中也需要增加三到四种的文件:D:SDKDXSDKLibD:SDKDXSDKSamplesC+DirectShowBaseClassesDebug (基类编译前,这两个可以不设置)D:SDKDXSDKSamplesC+DirectShowBaseClassesRelease(接下来才是 VC原来的)二. 第二步,编译 BaseClasses基类本人使用的是 VS2005,要使用 DirectShow进行编程,需要对环境进行必要的配置。第一步:对 dssdk中的 baseclass.sln进行编译,生成需要的 debug和

3、release文件,具体步骤如下:在 VS6中,安装 DirectShow9c版本之后,直接打开 BaseClass中的 Vc6工程baseclasses.dsw文件,直接编译即可,编译 Debug Release Debug_Unicode Release_Unicode四个版本,都需要进行额外的设置(头文件或者链接库目录设置)。DirectShow的 BaseClass中已经带了 VS2005的工程文件 baseclasses.sln,在vs2005中打开此文件,提示你进行必要的工程转换,转换之后开始编译,编译过程一般会出现下面两个问题:(1)C:Program FilesMicrosof

4、t Visual Studio 8VCPlatformSDKincludewinnt.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-configur

5、ation-C/C+ - General-Additional Include Directories里面的内容(.,.include)删掉,重新编译,PVOID64的错误消失,原因如下:POINTER_64 是一个宏,在 64位编译下起作用,它包含在 SDK目录下的BASETSD.H中(Microsoft Visual Studio 8VCPlatformSDKIncludebasetsd.h(23):#define POINTER_64 _ptr64),但DXSDK自己也带了一个 basetsd.h,里面没有定义 POINTER_64,从而导致出错,只需要改变 include files的

6、优先级即可。当然,也可以改写 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+/

7、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)使用

8、 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,然后在 Callin

9、g 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中输入如下代

10、码:Debug版本 strmbasd.lib, msvcrtd.lib, winmm.libRelease版本 strmbase.lib, msvcrt.lib, winmm.lib并且选中 Ignore all default libraries。(PS:这句有点误导)DirectShow SDK建议,DirectShow 应用程序应该至少连接库文件strmiids.lib和 quartz.lib。前者定义了 DirectShow标准的 CLSID和 IID,后者定义了导出函数AMGetErrorText(如果应用程序中没有使用到这个函数,也可以不连接这个库)。如果程序里包含了头文件stre

11、ams.h,则一般库文件还要连接 strmbasd.lib、uuid.lib、winmm.lib、msvcrt(d).lib注意:必须设置“忽略所有默认库“为”否“,否则会出现DS-Render.def : error LNK2001: 无法解析的外部符号 DllCanUnloadNowDS-Render.def : error LNK2001: 无法解析的外部符号 DllGetClassObject(6)如果按照上述操作仍有如下类似的错误提示error LNK2001: unresolved external symbol _CLSID_FilterGraph请在 link下添加 strmi

12、ids.lib和 quartz.lib,特别是在 2003开发环境下应当添加该链接库。因为DirectShow SDK建议,DirectShow 应用程序应该至少连接库文件strmiids.lib和 quartz.lib。前者定义了 DirectShow标准的 CLSID和 IID,后者定义了导出函数AMGetErrorText(如果应用程序中没有使用到这个函数,也可以不连接这个库)。如果程序里包含了头文件streams.h,则一般库文件还要连接 strmbasd.lib、uuid.lib、winmm.lib。还必须加入 #include 否则会出现 无法解析的符号 _CLSID_XXXX出现

13、下述错误时error LNK2001: unresolved external symbol class ATL:CAtlBaseModule ATL:_AtlBaseModule (?_AtlBaseModuleATL3VCAtlBaseModule1A) Project|Settings|Link 在 Debug下包含 atls.lib ,在 Release下添加atlsd.lib 库。出现下述错误时c:microsoft directx 9.0 sdk (summer 2004)samplesc+directshowbaseclasseswxdebug.h(329) : error C2146: 语法错误 : 缺少“;”(在标识符“m_pString”的前面)c:microsoft directx 9.0 sdk (summer 2004)samplesc+directshowbaseclasseswxdebug.h(326) : error C2065: “m_pString”: 未声明的标识符请添加如下代码#include #define PTCHAR (TCHAR *)/下面是一些 DirectShow入门文章及 VC环境配置收藏介绍 Directshow的一些文章链接,放在这里,作为普及读物。http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号