vs2008下DShow开发环境配置

    [转载请注明原始出处: http://blog.csdn.net/chinadragon76/article/details/8704102]

    最近有些流媒体相关的项目,突击了一下陆其明的两部大作,并推荐原MS DShow架构师Geraint Davies所在网址:http://www.gdcl.co.uk

     通过google及自己的摸索,发现在vc8.0及更高版本下编译DShow应用、SDK工程或者开发Filter通常会遇到以下问题:

 1.操作系统(WINVER或_WIN32_WINNT)版本冲突问题

    该问题通常可以通过修改操作系统版本号来修正,例如在预编译头stdafx.h中开始的地方使用如下形式的定义来排除冲突

#ifndef WINVER
#define WINVER 0x0501
#endif

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif

2.运行时库的冲突

  一般DSHOW应用或Filter控件开发均使用MD/MT/-d运行时库,若不愿意(~像我一样比较懒)安装DX SDK或类似Windows Server 2003 R2 Platform SDK(5.2.3790.2075.51)的朋友可能会遇到,如在MD/-d是可以考虑禁用MT/-d运行时库来解决冲突。参考代码如下:

#ifdef _DEBUG
# pragma comment(linker, "/NODEFAULTLIB:libcmtd.lib")
#else
# pragma comment(linker, "/NODEFAULTLIB:libcmt.lib")
#endif // !#ifdef _DEBUG

3. 若出现类似“C:\Program Files\Microsoft SDKs\Windows\v6.0A\\include\winnt.h(236) : error C2146: 语法错误 : 缺少“;”(在标识符“PVOID64”的前面)”不能识别PVOID64的问题,通常是应用于不同Windows SDK版本的头包含造成的宏冲突的问题,解决办法如下:

自定义一个 "my_def.h"头文件,内容如下:

#pragma once
#ifndef POINTER_64
#if !defined(_MAC) && (defined(_M_MRX000) || defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_VER >= 1100) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
#define POINTER_64 __ptr64
typedef unsigned __int64 POINTER_64_INT;
#if defined(_WIN64)
#define POINTER_32 __ptr32
#else
#define POINTER_32
#endif
#else
#if defined(_MAC) && defined(_MAC_INT_64)
#define POINTER_64 __ptr64
typedef unsigned __int64 POINTER_64_INT;
#else
#if (_MSC_VER >= 1300) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
#define POINTER_64 __ptr64
#else
#define POINTER_64
#endif
typedef unsigned long POINTER_64_INT;
#endif
#define POINTER_32
#endif
#endif // #ifndef POINTER_64
该文件应用于使用预编译头或不使用预编译头的各种情况,只需要INCLUDE进来就OK了。


4.出现其他各类链接错误,有种比较能根治的措施 -- 重新编译SDK的BaseClasses工程。当然这样做还有更多的好处,最重要的一点是可以Review代码时,能调试跟踪。


 [这里]提供了一份不用下载SDK或DX,而能编译并调试跟踪的工程源代码(包含生成STRMBASE.lib/strmbasd.lib的BaseClasses工程),使用到了陆其明提供的AVChat的开源代码(非常感谢这位老兄的无私奉献)做为示范,您只需要简单地右键”生成解决方案“就好了,希望对需要的朋友有些帮助。





你可能感兴趣的:(流媒体技术)