Ho scritto una lingua di script per le mie applicazioni e il mio obiettivo è rendere possibile la pubblicazione di qualsiasi tipo da delphi nella sceneggiatura. Io uso rtti per automatizzare questo compito. Per ogni tipo di istanza come le classi, utilizzo il seguente codice per trovare e chiamare un metodo dallo script.Delphi - Invoke Metodo di registrazione per nome
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;
Ma con un record di questo codice non funziona, perché il tipo TRttiMethod non offre un metodo Invoke() per i tipi di record. Posso accedere alle informazioni sui metodi da Info.GetMethod ('AMethod') dal tipo di record.
Per esempio io ho un disco come questo:
TRecordType = record
Field1, Field2 : single;
procedure Calc(Value : integer);
end;
Così Qualcuno sa un modo per richiamare un metodo da un record se ho methodname o methodaddress?
Hai appena reinventato [DWScript] (http://code.google.com/pwdwscript/)? –
Grazie per il suggerimento, ma conosco DWScript. La mia lingua è intesa come interfaccia scriptable per un programma delphi in cui sono possibili costrutti come AObject.AFunction.AObject.DoSomething. – DragonFlyOfGold
Pensavo che DWScript potesse fare tutto questo, ma forse ho sbagliato –