zoukankan      html  css  js  c++  java
  • 01.Delphi最简单的接口

    我想学习一个插件框架,但是那个框架里面大量用到了接口,于是不得不把接口看一下了。总感觉接口编程这一块非常的绕,每一行都注释了。

    unit Unit1;
    
    interface
    
    uses
      Windows,
      Messages,
      SysUtils,
      Variants,
      Classes,
      Graphics,
      Controls,
      Forms,
      Dialogs,
      StdCtrls;
    
    type
      // 父接口
      IGreetable = interface
        ['{FE5A34E5-21AB-4120-971B-FDC3241AD55D}']
        // 用于返回一段文本
        function SayHello: string;
      end;
    
      TMan = class(TObject, IGreetable)
        function SayHello: string;
        // 接口都会有的3个函数(QueryInterface,_AddRef,_Release)
        function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
        function _AddRef: Integer; stdcall;
        function _Release: Integer; stdcall;
      end;
    
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        // 弹出一段文本
        procedure Greeting(Intf: IGreetable);
        {Private declarations}
      public
        {Public declarations}
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.DFM}
    
    // 这里实现自己定义的_AddRef、_Release和QueryInterface方法
    
    // 用于查找接口
    function TMan.QueryInterface(const IID: TGUID; out Obj): HResult;
    begin
      // 找到返回0,找不到返回'No such interface supported'
      if GetInterface(IID, Obj) then
        Result := 0
      else
        Result := Windows.E_NoInterface;
    end;
    
    // 接口调用计数
    function TMan._AddRef: Integer;
    begin
      Result := -1
    end;
    
    // 接口释放计数
    function TMan._Release: Integer;
    begin
      Result := -1
    end;
    
    // 客户函数,返回一段文本
    function TMan.SayHello: string;
    begin
      Result := 'Hello';
    end;
    
    procedure TForm1.Greeting(Intf: IGreetable);
    begin
      // 输出一段话
      ShowMessage(Intf.SayHello);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      // 定义一个父接口
      Intf: IGreetable;
    begin
      // 子接口创建
      Intf := TMan.Create;
      // 调用的是子接口中的Greeting函数
      Greeting(Intf);
    end;
    
    end.
  • 相关阅读:
    Comet OJ 夏季欢乐赛 篮球校赛
    USACO Tractor
    Comet OJ 夏季欢乐赛 Gree的心房
    USACO Hide and Seek
    Comet OJ 夏季欢乐赛 分配学号
    php如何上传txt文件,并且读取txt文件
    插入多行数据的时候,一个insert插入多行
    连接优化查询,按条件查询的时候,如何优化查询的时间
    如何将txt的多行记录直接导入到mysql数据库
    如何在自己的网页上插入一个超链接,发起临时qq会话
  • 原文地址:https://www.cnblogs.com/tianpan2019/p/11470652.html
Copyright © 2011-2022 走看看