- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
COM 技术介绍
最近做DSHOW开发,由于FILTER需要按自己的协议编写,所以要求对COM组件技术有一定了解,今天饿补了一下:??
一、COM介绍????1、定义????(Component?Object?Model)????COM是微软公司的最高级的,包罗万象的二进制通讯规范(也就是说是大家都要遵守的合同)。用于软件组件间跨进程,跨机器,和操作系统进行交互操作。COM是透明位置的。它可以在EXE,DLL或者远程机器上使用。????OLE是一个主要与用户界面相关的高级功能的集合。COM和OLE的概念界限原本就不清晰,总是容易混淆。????2、历史????OLE(Object?Linking??Embedding?)是1991年首次出现的(是WINDOWS3.1自带的)。OLE最初的含义是对象链接和嵌入。当时用DDE(动态数据交换)作为底层通讯协议。????1993,COM首次出现。微软推出OLE2.0,开始用COM代替DDE作为底层通讯协议。这也是COM第一个重要的用途。????1996年,大多数开发人员开始编写32位的WIN95应用程序。他们发现,OLE使用COM的方式是一种非常好的设计软件的方法。开发人员开始使用类似的方法编写自己的对象和界面。另外,操作系统也开始要求使用COM技术编程,如编写WIN95用户界面。这些即不是OLE,也不是AUTOMATION,那么他到底是什么呢?这个属于大多数人倾向于使用COM。????3、发展????1996年,微软推出NT4.0,DCOM首次出现,作为NT的一部分。它实现了将COM在分布式系统中的应用。????1997年开始流行ATL。COM作为一种技术规范,最早是由C语言来实现的,但是实现起来比较复杂。出现VC以后,又对COM进行了预制和封装,大大简化COM应用的开发。这就是ATL(Active?Template?Library)。????4、现状????我们经常见到的用途:????使用外来控件。特别是在网页上使用ACTIVEX控件。ADO????WORD/EXCEL的应用。(两者交叉使用,在应用程序中调用)????二、概念????接口:可以理解为一个抽象的类。????OBJCET(component),相当与组件。与VC和VB中理解的OBJECT是两个不同的概念。千万不要混淆。一个纯粹封装的OBJCET????它是一个封装好的黑匣子。是一个不能看到内部数据结构的东西。是一个抽象的东西。????最基本的OBJCET,给这个OBJECT?加上接口,用于访问这个黑匣子。那么这个OBJECT就是一个COM?OBJECT了。????Func1()????IFOO????Func2()????相当于一个手机充电器。用插销作为标准接口,但是内部实现被隐藏了起来。????在C++中,接口被表示为一个抽象的类。????例如:?程序清单:????class?IFoo?{???????virtual?void?Func1();???????virtual?void?Func2();????};????特点:????内部有多个纯虚函数。并且没有函数的实现。而且也不能包含任何内部数据成员。????把接口与实现隔离开来的目的:要把对象内部的工作细节隐藏起来,而这些实现都在类中实现。当实现类的数据成员发生变化时,客户程序是与已经编译好的二进制的接口通讯,所以它也无须重新编译。????例子:????手机是一个COM。它的芯片是接口。无论信息如何发生变化。我们都能接受。它的实现是个不不相同。而不同的实现就是不同的国产手机厂家。但是国内所有的厂家生产的手机全部都是使用的国外同一家的芯片产品,也就是说用同一个接口。????常见(有两个接口)????对象支持多接口。如果老版本的接口不方便,可以继承一个新的接口。但不能修改老的接口。接口一旦发布,就不能修改。????如果增加一个接口IFOO2,该接口仍然包含原接口IFOO的两个函数,而且新增加一个函数????IFOO????IFOO2????程序清单:????class?IFoo2?:?public?IFoo?{???????//?Inherited?Func1,?Func2???????virtual?void?Func2Ex(double?nCount)?=?0;????};????如何在C++中使用该接口的方法?????实现接口的来首先要从接口继承下来。????实现该接口:????class?CFoo?:?public?IFoo?{???????void?Func1()?{?/*?...?*/?}???????void?Func2(int?nCount
文档评论(0)