小编Cli*_*ood的帖子

在泛型类中转换为接口delphi

我从.NET类库中获取IEnumVariant,我试图使用泛型类将其转换为IEnumerator

尝试将II接口转换为泛型类型时,存在编译器错误"运算符不适用于此操作数类型"我尝试将类型转换为类时遇到过变通方法,但这些不适用于接口.

使用Rob建议的Supports似乎有问题,TypeInfo为参数化类型返回nil.

uses WinApi.ActiveX, Generics.Collections;

type
  TDotNetEnum<T: IInterface> = class(TInterfacedObject, IEnumerator<T>)
  strict private
    FDotNetEnum: IEnumVariant;
    FCurrent: T;
    function MoveNext: Boolean;
    procedure Reset;
    function GetCurrent: TObject;
    function IEnumerator<T>.GetCurrent = GenericGetCurrent;
    function GenericGetCurrent: T;
  public
    constructor Create(const ADotNetObject: OleVariant);

    //// I can get it to work using this constructor
    // constructor Create(const ADotNetObject: OleVariant; const AGUID: TGUID);
  end;

implementation

uses System.Rtti, SysUtils, mscorlib_TLB, ComObj;

constructor TDotNetEnum<T>.Create(const ADotNetObject: OleVariant);
var
  netEnum: IEnumerable;
begin
  netEnum := IUnknown(ADotNetObject) as mscorlib_TLB.IEnumerable;
  FDotNetEnum := netEnum.GetEnumerator();
end; …
Run Code Online (Sandbox Code Playgroud)

delphi generics delphi-xe6

3
推荐指数
1
解决办法
1040
查看次数

标签 统计

delphi ×1

delphi-xe6 ×1

generics ×1