博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转帖:DirectShow 在VS2005中环境配置
阅读量:2397 次
发布时间:2019-05-10

本文共 4248 字,大约阅读时间需要 14 分钟。

转载请标明是引用于

 

baseclasses参考代码(VS2005下编译通过):

 

 

先介绍系统环境:

XP Professional sp2
visual studio 2005 version 8.0.50727.42
DirectX 9.0(9.0b) SDK Update - (Summer 2003)

首先,就是编译baseclasses,什么是baseclasses?打开你的dx的sdk安装目录,例如:
D:\DX90SDK\Samples\C++\DirectShow\
这里就有一个叫baseclasses的工程,为安全起见,请先备份此工程。

1,双击baseclasses.sln打开

提示我们需要转换工程,按提示转换就是了,编译

提示错误:
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C2146: syntax error : missing ';' before identifier 'Buffer'
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\DX90SDK\Samples\C++\DirectShow\BaseClasses\ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

第一类问题的解决:错误发生在:operator=(LONG);函数定义中,这是因为在VC6中,如果没有显示的指定返回值类型,编译器将其视为默认整 形;但是vs2005不支持默认整形,解决这个问题不能修改每个没有显示指示返回值类型的函数地方,可以用wd4430来解决;具体的在工程选项中的c+ +/Command Line中添加/wd4430即可。

2,在Tools->Options->Projects and solutions->vc++ directories->show directories for里选择include files

然后增加
D:\DX90SDK\Include
D:\DX90SDK\Samples\C++\DirectShow\BaseClasses
D:\DX90SDK\Samples\C++\Common
可能会问题依旧,调整一下include files的顺序吧,把他们都放在最后,例如我的环境:
$(VCInstallDir)include
$(VCInstallDir)atlmfc\include
$(VCInstallDir)PlatformSDK\include
$(FrameworkSDKDir)include
D:\DX90SDK\Include
D:\DX90SDK\Samples\C++\DirectShow\BaseClasses
D:\DX90SDK\Samples\C++\Common
然 后在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;
之前增加一行:
#define   POINTER_64   __ptr64

3,到目前为止,还剩下:

BaseClasses\ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
这个错误,解决方法如下:
打开project->BaseClasses properties->configuration->C/C++ ->Command Line,增加/wd4430选项。

4, 接着编译,提示error C2065: 'Count' : undeclared identifier等等错误

这个是微软的历史遗留问题了,C++标准语法的问题,因为在之前在for循环内定义的变量可以在for之外的地方使用,即 在第一个for里for(int i,...),以后的for再使用i不必再声明,解决方法也很简单,打开project->BaseClasses properties->configuration->C/C++->Language->Force Comformance in For Loop Scrope设置为No即可。当然,也可以手动改代码,增加一个声明就是了。

经过上面几个步骤,应该是可以顺利编译了,对于其它版本的工程,照样设置就可以了,总共编译出下面4个文件备用:

BaseClasses\Debug\strmbasd.lib
BaseClasses\Debug_Unicode\strmbasd.lib
BaseClasses\Release\STRMBASE.lib
BaseClasses\Release_UnicodeSTRMBASE.lib

在lib里面加入

commctrl.lib

coredll.lib
strmiids.lib
strmbase.lib
uuid.lib
ole32.lib
commdlg.lib

你或许需要在Tools->Options->Projects and solutions->vc++ directories->show directories for->library files里把它们加进去。

赶快编译DX90SDK\Samples\C++\DirectShow\Players\PlayDMO工程试试看吧。

5、在编译完PlayDMO后,我试着自己编译自己写的一个程序,结果报错了。
1>------ 已启动生成: 项目: AviPlayerDemo_new, 配置: Debug Win32 ------1>正在链接...1>CDXGraph.obj : error LNK2019: 无法解析的外部符号 "int __cdecl wsprintfWInternal(unsigned short *,unsigned short const *,...)" (?wsprintfWInternal@@YAHPAGPBGZZ),该符号在函数 "private: void __thiscall CDXGraph::AddToObjectTable(void)" (?AddToObjectTable@CDXGraph@@AAEXXZ) 中被引用1>C:\Documents and Settings\Administrator\桌面\AviPlayerDemo_new\Debug\AviPlayerDemo_new.exe : fatal error LNK1120: 1 个无法解析的外部命令1>生成日志保存在“file://c:\Documents and Settings\Administrator\桌面\AviPlayerDemo_new\Debug\BuildLog.htm”1>AviPlayerDemo_new - 2 个错误,0 个警告========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========

很郁闷找了半天没有发现什么不对,因为都是Debug版的。

后来发现我的工程里的选项是:

而baseclasses里是设置"将wchar_t视为内置类型" 一项设置成了否。

解决方法显而易见:把他们改统一。问题解决了。

 

 

以上资料整理自下面3个blog,一并列出:
DirectShow在VS2005中PVOID64问题和配置问题
DirectShow 在VS2005中环境配置
Some DirectShow Samples Break in Visual Studio 2005

你可能感兴趣的文章
国外oracle dba的招聘要求
查看>>
ORA-14402的处理
查看>>
用shell帮助解决ORA问题
查看>>
关于连续登录的问题探究
查看>>
10g升级至11g后数据库无法启动的问题解决
查看>>
SQLPLUS Fails With SP2-1503 SP2-0152 After New 11.2 Installation解决
查看>>
linux下安装mysql的问题解决
查看>>
10g升级至11g exp的问题解决
查看>>
oracle坏块修复实例
查看>>
sqlplus连接数的测试
查看>>
虚拟专用数据库VPD应用
查看>>
linux kernel引发的oracle问题及解决
查看>>
可更新的物化视图
查看>>
vpd碰到的问题解决
查看>>
关于segment的一个小问题
查看>>
ORA-01461问题的对比测试
查看>>
数据库环境中的shell脚本应用
查看>>
狗狗的天空
查看>>
alert日志中出现ash size的警告
查看>>
10g升级至11g需要考虑的参数优化
查看>>