gpt4 book ai didi

delphi - Rtti 调用类方法显示无效类型转换

转载 作者:行者123 更新时间:2023-12-01 19:52:36 26 4
gpt4 key购买 nike

我制作了一个非常通用的单元,其中的设置对象都是 TObject,我不想使用任何单元,这就是我这样做的原因。所以我的做法是使用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;

我不知道我做错了什么。也许在不知道对象类型的情况下不可能做到这一点。我的主对象是一个具有所需类型的 TObject,我可以调用它的方法。但那个类程序确实让我很为难。

有人知道我如何实现这个目标吗?

最佳答案

代替实例使用

M.Invoke(MainObj.ClassType,

关于delphi - Rtti 调用类方法显示无效类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48828365/

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