Rtti 调用一个 class 方法说类型转换无效

Rtti invoke a class method says invalid type cast

我制作了一个非常通用的单元,其中的设置对象都是 TObjects 我不想使用任何单元,这就是我这样做的原因。所以我的做法是用RTTI来调用一切。但是现在我面临一个问题,我可以调用所有函数并提供参数和所有内容,但是当方法是 class procedure/function 时我不能调用它并且它说类型转换无效。

我查看了 embarcadero 的网站,它说当我们在 class 方法上调用 rtti.invoke 时,我们必须将 Args 中的第一个参数设置为 class 引用。我试过了,但没用。看看我的代码:

function TSomething.ExecMethodAndRet(MethodName: string;
  Args: array of TValue): TObjectList<TObject>;
var
 R : TRttiContext;
 T : TRttiType;
 M : TRttiMethod;
 lArgs : array of TValue;
 i : integer;
begin
  T := R.GetType(MainObj.ClassInfo);
  for M in t.GetMethods do
    if (m.Parent = t) and (UpperCase(m.Name) = UpperCase(MethodName))then
    begin
      if (m.IsClassMethod) then
      begin
        for I := 0 to Length(Args) do
          lArgs := [args[i]];
        lArgs := [MainObj] + lArgs;
        result := M.Invoke(MainObj, Args).AsType<TObjectList<TObject>>; <- this will say invalid type cast
      end
      else
        result := M.Invoke(MainObj, Args).AsType<TObjectList<TObject>>; <- this one works when it's not a classMethod that's why i made a condition
    end;
end;

我不知道我做错了什么。也许在不知道对象类型的情况下无法做到这一点。我的 Main Obj 是一个所需类型的 TObject,我可以调用它的方法。但是那个 class 程序真的让我很难受。

有人知道我是怎么做到的吗?

而不是实例使用

M.Invoke(MainObj.ClassType,