预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Delphi中的COM编程 接口 1.1定义接口: 目的:什么是接口,以及和抽象类的关联以及不同点。 抽象类(备注理解接口最简单的方法) 永远不能创建一个抽象类的实例; 本身不能实现功能,依靠派生类实现; 接口 被申明为interface类型。接口名从字母I开始。类类型名从T开始。 所有的接口从IUnknown继承; 不能创建接口实例; 不能在接口中指定范围指示。所有的方法都是公有型(public),不能在接口中申明包括范围指示; 不能申明变量;接口只能决定提供什么样的功能,对于如何完成功能没有限制。 接口中申明的所有函数和过程,概念上讲都是虚(virtual)抽象函数和过程。申明时不能带virtual; 接口是不变的; 1.2申明一个接口 目的:如何声明一个接口 GUID(GloballyUniqueIdentifier)全球唯一标示符:CoCreateGuid产生(API) 1.3实现接口 目的:如何实现接口 实现IUnknown:QueryInterface、_AddRef、_Release 使用TInterfaceObject来自动实现Iunknown,否则的话自己要实现上面的方法。 创建、使用及销毁接口:create;指向接口的指针不访问任何信息;自动释放、强迫销毁一个接口将变量置为nil 注:delphi自动创建和销毁接口。 获取单个接口的指针: 直接分配:类与他们实现的接口类型兼容的 varMyInteger:TClass; myNumber:Iinterface; begin myInteger:=TClass.create; myNumber:=myInteger; end; GetInterface(constIID:TGUID;outobj):判断对象是否支持一个接口 VarMyObject:TObject; myInterface:Iinterface; begin myObject:=TClass.create; ifmyObject.GetInterface(Iinterface,myInterface)then … end; as操作符:对象支持特定的接口(对象不支持接口就错的话,可以拦截错误); 要使用getinterface和as的话必须要有一个guid as自动调用计数功能; 1.4高级多级接口问题 目的:在一个类中实现多个接口 在一个类中实现多个接口 TXY=class(TInterfacedObject,IXX,IYY):类TXY实现了IXX和IYY接口的所有方法。 多个接口不是多重继承:TXY有且只有一个基类TInterfacedObject; 方法分辨字句:当接口方法在类中实现时,方法分辨子句可使用改变他的名称 TXY=class(TInterfacedObject,IXX,IYY) procedureIXX.pxy=pxy1 procedureIYY.pxy=pxy2 接口授权:一个接口的实现授权给另一个类:一个类包含针对另一个类的指针。 内部类:实现一个或多个接口的功能性; 外部类:简单的将这些方法传递给内部类,而不是重新实现接口; 接口属性:可以定义只读、只写、或者读写属性; 但是所有访问都必须通过访问函数,因为接口不能定义存储。 1.5小结 目的:如何在delphi应用程序中内部使用接口,了解delphi语言要素的接口。 申明一个接口; 在类中实现接口; 实现IUnknown所需要的功能; 自动对象析构的处理; 在类中实现多个接口; 将一个接口的实现授权给一个内部对象; 定义并实现接口属性 COM/DCOM COM(ComponentObjectModel) COM/DCOM可以说是windows平台最基本和重要的技术,现在几乎所有microsoft的软件都是以COM/DCOM技术开发而成的。COM/DCOM基本上是一种组件模型,它提供了一些基本的原则方法让程序员在windows平台中使用标准的对象模型来开发软件组件,由于这些软件组件遵循了microsoft定义的标准,因此这些组件可以使用在任何支持COM/DCOM标准的软件中,让这些软件组件提供的服务可以被不同的软件重复的使用。 COM/DCOM软件借助接口来提供它的服务,一个COM/DCOM对象可以同时提供数个不同的接口,并且在不同的接口中提供不同的方法和属性。 COM/DCOM至少提供并且实现一个称为IUnknown的接口,这个接口提供了最基本且必要的方法,它是所有其它接口的父借口,其它借口都是从他继承而来的。 COM/DCOM对象和他所有的接口都必须有所谓的CoClass(ComponentObjectClass)来加以定义。如果不定义在一个CoClass中就说明COM/DCOM不支持这个接口,