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.
  • 相关阅读:
    HDU 1505 City Game
    HDU 1506 Largest Rectangle in a Histogram
    HDU 1838 Chessboard
    HDU 2512 一卡通大冒险
    HDU 1081 To The Max
    HDU 2845 Beans
    HDU 1422 重温世界杯
    HDU 1231 最大连续子序列
    第6章 接口和实现
    java面向抽象编程样例
  • 原文地址:https://www.cnblogs.com/tianpan2019/p/11470652.html
Copyright © 2011-2022 走看看