gpt4 book ai didi

Delphi RTTI 使用 Method.Invoke 作为 tkEnumeration 参数

转载 作者:行者123 更新时间:2023-12-02 01:44:28 27 4
gpt4 key购买 nike

如何将 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. 对方法(TRttiMethod 实例)调用 GetParameters 以获取参数数组。这是一个 TRttiParameter 数组。
  2. 在 TRttiParameter 实例上,使用 ParamType 获取描述类型的 TRttiType 实例。
  3. 使用 TRttiType 实例的 Handle 属性获取类型信息。
  4. 调用 TValue.FromOrdinal 时使用该类型信息来创建 TValue 实例。
  5. 调用您的方法。
  6. 利润!

我这里没有编译器,所以我不会尝试为此编写代码。希望上面的概述对您来说足够了。

关于Delphi RTTI 使用 Method.Invoke 作为 tkEnumeration 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18289782/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com