Delphi下的接口编程学习笔记

时间:2010-02-03 12:46:34  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:人都可以卖票,很显然不适合把经理人也包括到卖票服务的继承架构中,我们需要的只是一个共通的卖票服务。于是,卖票的服务是个接口,电影院、歌剧院什么的只要都遵循这样一个服务定义就能很好地相互交互和沟通(如果须要的话)。1.2  如何在Delphi中使用接口 1.2.1  声明接口
  正文:1.1  为什么使用接口?
    举个例子好了:有这样一个卖票服务,电影院可以卖票,歌剧院可以卖票,客运站也可以卖票,那么我们是否需要把电影院、、歌
剧院和客运站都设计成一个类架构以提供卖票服务?要知道,连经理人都可以卖票,很显然不适合把经理人也包括到卖票服务的继承架构
中,我们需要的只是一个共通的卖票服务。于是,卖票的服务是个接口,电影院、歌剧院什么的只要都遵循这样一个服务定义就能很好地
相互交互和沟通(如果须要的话)。

1.2  如何在Delphi中使用接口
1.2.1  声明接口

IMyInterface = interface(IInterface)  //说明(1)
      ['{63E072DF-B81E-4734-B3CB-3C23C7FDA8EA}']  //说明(2)
         function GetName(const str: String): String; stdcall;

function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; //说明(3)
         function _AddRef: Integer; stdcall;  //使接口引用数加1。
          function _Release: Integer; stdcall;//使接口引用数减1,当小于等于0时作释放动作。
     end;

            
说明(1):如果有继续关系则在括号里填父接口,否则省却,如:
IMyInterface = interface
这样就行。
说明(2):此GUID可选,如果要实现具有COM特性的接口的话则需要加上,Delphi中对于有GUID的接口在运行时在VMT表的预定位置生成接口的信息,如接口方法的定义、方法参数定义能详细信息。
说明(3):接口必须实现这三个函数。

1.2.2  接口的实现
            接口服务是由类来实现的。

TIntfClass = class(TObject, IMyInterface)
private
FCounter: Integer;
FRefCount: Integer;
public
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
...
end;


1.2.3  获取接口
     a. 使用类型转换。
            如:
var aIntf: IMyInterface;
begin
  aObj := TIntfClass.Create;
  try
    aIntf := (IMyInterface(aObj);
    ...

    b. 利用Delphi编译器内建机制。 如:
aIntf := aObj。

    c. 利用对象的QueryInterface方法。如
OleCheck(aObj.QueryInterface(IID, aIntf));
只能存取有GUID的COM接口。
     d. 利用as操作符。
           使用as操作符必须符合下面条件:
       1.接口必须明确地指定是从IInterface接口继承下来。
Delphi下的接口编程学习笔记》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/Delphi/12753.html

 1/4    1 2 3 4 下一页 尾页


关键字:

关于《Delphi下的接口编程学习笔记》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td