Napisałem skryptowy język dla moich aplikacji i moim celem jest umożliwienie publikowania dowolnego typu z delphi w skrypcie. Używam rtti do automatyzacji tego zadania. Dla każdego typu instancji, takiego jak klasy, używam następującego kodu, aby znaleźć i wywołać metodę ze skryptu.Delphi - Metoda Invoke Record na nazwę
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;
Ale rekord ten kod nie zadziała, ponieważ typ TRttiMethod nie oferuje metodę Invoke() dla typów rekordów. Mogę uzyskać dostęp do informacji o metodach przez Info.GetMethod ("AMethod") z rodzaju rekordu.
Na przykład mam zapis takiego:
TRecordType = record
Field1, Field2 : single;
procedure Calc(Value : integer);
end;
Więc czy ktoś wie sposób, aby wywołać metodę z rekordem jeśli mam methodName lub methodaddress?
Czy właśnie wymyśliłeś [DWScript] (http://code.google.com/p/dwscript/)? –
Dzięki za podpowiedź, ale znam DWScript. Mój język jest przeznaczony jako skryptowalny interfejs do programu delphi, w którym możliwe są konstrukcje takie jak AObject.AFunction.AObject.DoSomething. – DragonFlyOfGold
Pomyślałem, że DWScript może to wszystko zrobić, ale może się mylę. –