gpt4 book ai didi

delphi - 如何获取TVirtualInterface的调用方法参数名称?

转载 作者:行者123 更新时间:2023-12-03 05:41:52 25 4
gpt4 key购买 nike

我想使用 TVirtualInterface 的动态方法调用。调用方法时,我需要参数名称。如何获得?我毫无问题地获取值和类型。

TSimple = class(TVirtualInterface)
constructor Create(PIID: PTypeInfo);
procedure DoInvoke(Method: TRttiMethod; const Args: TArray<TValue>; out Result: TValue);
end;

constructor TSimple.Create(PIID: PTypeInfo);
begin
inherited Create(PIID, DoInvoke);
end;

procedure TSimple.DoInvoke(Method: TRttiMethod;
const Args: TArray<TValue>; out Result: TValue);
var
Arg: TValue;
ArgType, ArgName: string;
TempKind: TTypeKind;
begin
Write('You called the ', Method.Name, ' method ');
if Length(Args) > 1 then begin
Writeln('and it has ', Length(Args) - 1,' parameters:');
for Arg in Args do begin
TempKind := Arg.Kind;
if TempKind <> tkInterface then begin
ArgName := Arg.ToString; <<---- Shows : '(TypeName @ 029011B0)' not Name.
ArgType := Arg.TypeInfo.Name;
Writeln(ArgName, ' which is of the type ', ArgType);
end;
end;
end else begin
Writeln(' and it has no parameters.');
end;
end;

最佳答案

Args 不包含任何 RTTI 类型信息,而只是一个 TValue 数组,其中包含传递给方法的实际参数值 (TValue code> 类似于变体)。

如果要查询参数类型的信息,可以使用传递给方法的TRttiMethod来获取TRttiParameter数组,该数组有一个属性名称:

var
Arg : TRttiParameter;
...
for Arg in Method.GetParameters do
Writeln(Arg.Name);

关于delphi - 如何获取TVirtualInterface的调用方法参数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23863815/

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