- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一. 第一步,设置INCLUDE及LIB目录
在把dxsdk中提供的baseclass编译通过后,用四种方式编译,会分别生成四个lib,一般只用到了
其中的Debug和Release文件,在tool|option|vc++ directories中包含的files中设置如下。这里需要加入得include files有四种:D:/SDK/DXSDK/IncludeD:/SDK/DXSDK/Samples/C++/DirectShow/BaseClassesD:/SDK/DXSDK/Samples/C++/DirectShow/CommonD:/SDK/DXSDK/Samples/C++/Common/Include (这里可能是Common)(接下来才是VC原来的)
在后边的library files中也需要增加三到四种的文件:D:/SDK/DXSDK/LibD:/SDK/DXSDK/Samples/C++/DirectShow/BaseClasses/Debug (基类编译前,这两个可以不设置)D:/SDK/DXSDK/Samples/C++/DirectShow/BaseClasses/Release(接下来才是VC原来的)
二. 第二步,编译BaseClasses基类
本人使用的是VS2005,要使用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循环中使用。要解决
文档评论(0)