如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
COM技术介绍最近做DSHOW开发,由于FILTER需要按自己的协议编写,所以要求对COM组件技术有一定了解,今天饿补了一下:一、COM介绍1、定义(ComponentObjectModel)COM是微软公司的最高级的,包罗万象的二进制通讯规范(也就是说是大家都要遵守的合同)用于软件组件间跨进程,。跨机器,和操作系统进行交互操作。COM是透明位置的。它可以在EXE,DLL或者远程机器上使用。OLE是一个主要与用户界面相关的高级功能的集合。COM和OLE的概念界限原本就不清晰,总是容易混淆。2、历史OLE(ObjectLinking&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(ActiveTemplateLibrary)。4、现状我们经常见到的用途:使用外来控件。特别是在网页上使用ACTIVEX控件。ADOWORD/EXCEL的应用。(两者交叉使用,在应用程序中调用)二、概念接口:可以理解为一个抽象的类。OBJCET(component),相当与组件。与VC和VB中理解的OBJECT是两个不同的概念。千万不要混淆。一个纯粹封装的OBJCET它是一个封装好的黑匣子。是一个不能看到内部数据结构的东西。是一个抽象的东西。最基本的OBJCET,给这个OBJECT加上接口,用于访问这个黑匣子。那么这个OBJECT就是一个COMOBJECT了。Func1()IFOOFunc2()相当于一个手机充电器。用插销作为标准接口,但是内部实现被隐藏了起来。在C++中,接口被表示为一个抽象的类。例如:程序清单:classIFoo{virtualvoidFunc1();virtualvoidFunc2();};特点:内部有多个纯虚函数。并且没有函数的实现。而且也不能包含任何内部数据成员。把接口与实现隔离开来的目的:要把对象内部的工作细节隐藏起来,而这些实现都在类中实现。当实现类的数据成员发生变化时,客户程序是与已经编译好的二进制的接口通讯,所以它也无须重新编译。例子:手机是一个COM。它的芯片是接口。无论信息如何发生变化。我们都能接受。它的实现是个不不相同。而不同的实现就是不同的国产手机厂家。但是国内所有的厂家生产的手机全部都是使用的国外同一家的芯片产品,也就是说用同一个接口。常见(有两个接口)对象支持多接口。如果老版本慕涌诓环奖悖梢约坛幸桓鲂碌慕涌凇5?能修改老的接口。接口一旦发布,就不能修改。如果增加一个接口IFOO2,该接口仍然包含原接口IFOO的两个函数,而且新增加一个函数IFOOIFOO2程序清单:classIFoo2:publicIFoo{//InheritedFunc1,Func2virtualvoidFunc2Ex(doublenCount)=0;};如何在C++中使用该接口的方法?实现接口的来首先要从接口继承下来。实现该接口:classCFoo:publicIFoo{voidFunc1(){/*...*/}voidFunc2(intnCount){/*...*/}};调用:首先要引入接口的定义。创建一个指向对象的指针!!这只是为了方便而说的。实际上是错误的。COM中没有对象的指针。只有指向接口的指针。由于VC++调用内部虚拟函数是用了VTBL技术。即建立一个指针表,表中的指针指向成员函数。所以,指向接口的指针实质就是一个指向指针的指针。将指针指向对象,那么意思实际上就是说,将指针指向对象的接口的简称。所以,我们可以将指针指向对象的任意一个接口。最后都达到了将指针指向一个对象的目的。用DELPHI语法写,更清晰易懂。varpFoo:IFoo;pFoo:=CFoo.Create;//实现接口的函数pFoo.Func1()COM接口的实现。COM定义了大量的接口及相对应的II