Delphi 没有足够的 RTTI 可用于支持此操作

标签 delphi rtti

我刚开始使用 RTTI,现在遇到了一个错误。

我正在尝试按名称调用过程并使用TValue 数组传递参数。第一个问题是 GetParameters 返回一个 0 长度 的数组(而不是 1),我不能忽略它并尝试调用带有空数组的过程。

代码如下:

procedure TFormGenPopUpMessaggi.ExecMethod(Form : TObject; MethodName:string; const Args: array of TValue);
var
 R : TRttiContext;
 T : TRttiType;
 M : TRttiMethod;
 LParams : TArray<TRttiParameter>;
begin
  T := R.GetType(TFormAcqGestioneRichiesteAcquisto);
  for M in t.GetDeclaredMethods do
    if (m.Parent = t) and (m.Name = MethodName)then
    Begin
      LParams := m.GetParameters;
      showmessage(IntToStr(Length(LParams)));
      M.Invoke(TFormAcqGestioneRichiesteAcquisto.Create(Self), Parametri);
    End;
end;

procedure TFormGenPopUpMessaggi.EseguiMessaggio(Sender : TObject);
  var Procedura, TipoClasse : String;
      Argomenti : String;
      ArrayArgomenti : Array of TValue;
      IdMessaggio, IdElenco : Integer;
      I : Integer;
      C : TRttiContext;
      O : TObject;
begin
    [...]`
    Procedura := QGenerica.FieldByName('NOME_PROCEDURA').AsString;
    [...]
    TipoClasse := 'U' + Copy(QGenerica.FieldByName('NOME_FORM').AsString, 6, 1000) + '.' +         QGenerica.FieldByName('NOME_FORM').AsString;

    O := (C.FindType(TipoClasse) as TRttiInstanceType).MetaClassType.Create;

    if Length(ArrayArgomenti) = 0 then
      ExecMethod(O, Procedura,[])
    else
      ExecMethod(O, Procedura, ArrayArgomenti);

[...]
End;    

调用的过程是:

procedure TrovaRichiesta(Id : Integer);

在另一个类中公开声明类型为 TFormAcqGestioneRichiesteAcquisto。 代码正确找到过程名称,正确创建新的表单类,但不给我任何参数 showmessage(IntToStr(Length(LParams))) 结果为 0

所有其他变量均已正确初始化。是否需要定义任何类型的 key 才能启用 RTTI?

最佳答案

要获取详细的 RTTI,请打开 {$TYPEINFO}{$METHODINFO} 编译器指令,如所述 here .

关于Delphi 没有足够的 RTTI 可用于支持此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22218595/

相关文章:

delphi - 表格已经打开了吗?

delphi - 优秀的、免费的 Delphi 日志框架

c++ - 如何从 type_info 获取模板参数的类型

c++ - 运行时类型比较

delphi - 在Delphi中获取接口(interface)引用的GUID

delphi - 当一个类实现了后代接口(interface)时,为什么它不自动算作实现了基接口(interface)?

delphi - 如何将 TStringGrid 从 Delphi 7 转换为 Delphi XE

php - php mcrypt 和 Delphi 组件之间的 AES 加密差异

delphi - 哪个 Delphi 版本支持公共(public)方法的 RTTI?

C++:是一个具有虚拟基础但没有虚拟函数的多态类并且具有VTable吗?