加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Delphi TInterfaceList中存储和定位多个接口类型

发布时间:2020-12-15 04:29:45 所属栏目:大数据 来源:网络整理
导读:我将来自一系列对象的小接口存储到单个TInterfaceList’store’中,目的是向最终用户提供特定接口类型的列表,因此每个接口都将公开一个’GetName’函数,但所有其他方法都是唯一的那个接口类型.例如,这里有两个接口: IBase = interface //-------------------
我将来自一系列对象的小接口存储到单个TInterfaceList’store’中,目的是向最终用户提供特定接口类型的列表,因此每个接口都将公开一个’GetName’函数,但所有其他方法都是唯一的那个接口类型.例如,这里有两个接口:
IBase = interface
    //----------------------------------------
    function GetName : string;
    //----------------------------------------
  end;

  IMeasureTemperature = interface(IBase)
    //------------------------------------
    function MeasureTemperature : double;
    //----------------------------------------
  end;

  IMeasureHumidity = interface(IBase)
    //----------------------------------------
    function MeasureHumidity: double;
    //----------------------------------------
  end;

我将其中几个接口放入一个TInterfaceList,然后我想扫描列表中的特定接口类型(例如’IMeasureTemperature’),构建另一个指向导出这些接口的对象的指针列表.我不想对这些对象的位置做任何假设,有些可能会导出多种类型的接口.我知道我可以使用以下类似的类层次结构执行此操作:

If FList[I] is TMeasureTemperature then ..

但是我想用接口类型做一些类似的事情,这可能吗?

解决方法

我想这可能会满足你的需求.
function InterfaceRefIsInterface(Intf : IUnknown; ExpectedIntf : TGUID) : Boolean;
var vReference : IUnknown;
begin
  if Supports(Intf,ExpectedIntf,vReference)  then
    Result := Intf = vReference
  else
    Result := False;
end;

我不确定当Intf和ExpectedIntf彼此继承时该函数的行为如何,但是在Intf与ExpectedIntf完全匹配的情况下,这将返回TRUE.

在你的例子中,IMeasureHumidity在IMeasureTemperature上不会返回true,但我不确定它将如何对IBase做出反应.根据初步测试,它也将在IBase上返回FALSE.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读