我已经创建了一个非常通用的单元,其中的设置对象都是TObjects,我不想使用任何单位,这就是我这样做的原因。所以我的方法是使用RTTI来调用所有内容。但是现在我遇到一个问题,我可以调用所有函数并给出参数和所有内容,但是当方法是类过程/函数时,我无法调用它并且它表示无效的类型转换。
我查看了embarcadero的网站,它说当我们在类方法上调用rtti.invoke时,我们必须将Args中的第一个参数设置为类引用。我试过了,但它没有用。看看我的代码:
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;
我不知道自己做错了什么。如果不知道对象的类型,可能无法做到这一点。我的主要Obj是一个所需类型的TObject,我可以调用它的方法。但那个班级程序真的让我很难过。
有人知道我怎么能做到这一点?
答案 0 :(得分:4)
而不是实例使用
likedUserId