私は自分のアプリケーション用のスクリプト言語を書きました。私の目標は、スクリプトで Delphi から任意の型を公開できるようにすることです。このタスクを自動化するために rtti を使用します。クラスのようなインスタンス タイプでは、次のコードを使用して、スクリプトからメソッドを見つけて呼び出します。
var Info : TRttiType;
Meth : TRttiMethod;
Param : TArray<TValue>;
Result : TValue;
AnyClass : TClass;
begin
...
Info := RttiContext.GetType(AnyClass);
Meth := Info.GetMethod('AMethod');
Setlength(Param, 1);
Param[0] := TValue.From<Integer>(11);
Result := Meth.Invoke(ClassInstance, Param);
...
end;
しかし、TRttiMethod 型はレコード型の Invoke() メソッドを提供しないため、レコードではこのコードは機能しません。レコード型から Info.GetMethod('AMethod') でメソッド情報にアクセスできます。
たとえば、次のようなレコードがあります。
TRecordType = record
Field1, Field2 : single;
procedure Calc(Value : integer);
end;
メソッド名またはメソッドアドレスがある場合、レコードからメソッドを呼び出す方法を知っている人はいますか?