Delphi RTTI使用Method.Invoke进行tkEnumeration参数

时间:2013-08-17 14:18:29

标签: delphi rtti

如何将tkEnumeration作为RTTI参数传递给Method.Invoke。

我试过了

TMyEnums  =  (tsEnum1, tsEnum2);


ParameterList : Array of TValue;

lTypeInfo : PTypeInfo;


lTypeInfo := TypeInfo(TMyEnums);

ParameterList[0] := TValue.FromOrdinal(lTypeInfo, Integer(tsEnum1)); 

Method.Invoke(Object, ParameterList);

哪个失败了。 Method.Invoke可以使用tkEnumeration参数吗? 即使它确实有效 - 在运行时的应用程序中我不知道参数的类型,所以我无法获得lTypeInfo;

有没有办法从TRttiParameter获取lTypeInfo?

我可以按如下方式获取TRttiProperty:

lTypeInfo:= RTTIProperties [i] .GetValue(SourceObject).TypeInfo

是否存在TRttiParameter的等价物?

1 个答案:

答案 0 :(得分:4)

您需要使用反射来查找参数的类型:

  1. 在方法(TRttiMethod实例)上调用GetParameters以获取参数数组。这是一个TRttiParameter数组。
  2. 在TRttiParameter实例上,使用ParamType获取描述该类型的TRttiType实例。
  3. 使用TRttiType实例的Handle属性获取类型信息。
  4. 在调用TValue.FromOrdinal时使用该类型信息来制作您的TValue实例。
  5. 调用您的方法。
  6. 利润!
  7. 我这里没有编译器所以我不会尝试为此编写代码。希望上面的大纲对你来说足够了。