01.Delphi最简单的接口
2021-02-04 12:14
标签:call sage phi 这一 window UNC fun rms forms 我想学习一个插件框架,但是那个框架里面大量用到了接口,于是不得不把接口看一下了。总感觉接口编程这一块非常的绕,每一行都注释了。 01.Delphi最简单的接口 标签:call sage phi 这一 window UNC fun rms forms 原文地址:https://www.cnblogs.com/tianpan2019/p/11470652.htmlunit 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.