zoukankan      html  css  js  c++  java
  • 教程-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;
  • 相关阅读:
    JAVA学习---JAVA基础元素
    JAVA开发-eclipse打开失败:A Java Runtime Environment(JRE) or Java Development Kit(JDK) must be available……的解决办法
    文章转载---西工大博士生文言文答辩致谢
    python中正则匹配之re模块
    python中random模块的使用
    python中函数的定义及调用
    Python中字符编码及转码
    python中字符串输出格式
    数据库与表的剩余操作
    线程其他相关用法和守护线程
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/4772929.html
Copyright © 2011-2022 走看看