教程-Supports判断接口(Instance)是否支持
1 function TCommandEnabledController.GetCommandVisible(const ACommandName: string): Boolean; 2 var 3 I: Integer; 4 //定义接口接收者 5 oCommandVisibleExecutor: ICommandVisibleExecutor; 6 begin 7 Result := True; 8 for I := 0 to FExecutors.Count - 1 do 9 begin 10 //判断接口是否支持 11 if Supports(FExecutors[I], ICommandVisibleExecutor, oCommandVisibleExecutor) then 12 begin 13 //使用接口接收者 14 if not oCommandVisibleExecutor.CommandVisible(ACommandName) then 15 begin 16 Result := False; 17 Break; 18 end; 19 end; 20 end; 21 end;
delphi中的函数Supports位于SysUtils单元
定义如下:
1 { Interface support routines } 2 3 function Supports(const Instance: IInterface; const IID: TGUID; out Intf): Boolean; overload; 4 function Supports(const Instance: TObject; const IID: TGUID; out Intf): Boolean; overload; 5 function Supports(const Instance: IInterface; const IID: TGUID): Boolean; overload; 6 function Supports(const Instance: TObject; const IID: TGUID): Boolean; overload; 7 function Supports(const AClass: TClass; const IID: TGUID): Boolean; overload;
实现如下:
1 { Interface support routines } 2 3 function Supports(const Instance: IInterface; const IID: TGUID; out Intf): Boolean; 4 begin 5 Result := (Instance <> nil) and (Instance.QueryInterface(IID, Intf) = 0); 6 end; 7 8 function Supports(const Instance: TObject; const IID: TGUID; out Intf): Boolean; 9 var 10 LUnknown: IUnknown; 11 begin 12 Result := (Instance <> nil) and 13 ((Instance.GetInterface(IUnknown, LUnknown) and Supports(LUnknown, IID, Intf)) or 14 Instance.GetInterface(IID, Intf)); 15 end; 16 17 function Supports(const Instance: IInterface; const IID: TGUID): Boolean; 18 var 19 Temp: IInterface; 20 begin 21 Result := Supports(Instance, IID, Temp); 22 end; 23 24 function Supports(const Instance: TObject; const IID: TGUID): Boolean; 25 var 26 Temp: IInterface; 27 begin 28 Result := Supports(Instance, IID, Temp); 29 end; 30 31 function Supports(const AClass: TClass; const IID: TGUID): Boolean; 32 begin 33 Result := AClass.GetInterfaceEntry(IID) <> nil; 34 end;
作者:疯狂Delphi
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
欢迎关注我,一起进步!扫描下方二维码即可加我


【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步