Hallo zusammen,
ich versuche gerade per
Rtti eine class function aufzurufen. Das scheitert aber leider an der fehlenden Instanz bzw. an einer verbotenen Konvertierung zur Laufzeit.
Ich verwende im Moment diese Funktion von PRUZ aber das läuft so leider nicht. Ich will eigentlich nur eine Function mit einem String als Result aufrufen und dann ein class field setzen.
Delphi-Quellcode:
function RttiMethodInvokeEx(
const MethodName:
string; RttiType : TRttiType; Instance: TValue;
const Args:
array of TValue): TValue;
var
Found : Boolean;
LMethod : TRttiMethod;
LIndex : Integer;
LParams : TArray<TRttiParameter>;
begin
Result:=nil;
LMethod:=nil;
Found:=False;
for LMethod
in RttiType.GetMethods
do
if SameText(LMethod.
Name, MethodName)
then
begin
LParams:=LMethod.GetParameters;
if Length(Args)=Length(LParams)
then
begin
Found:=True;
for LIndex:=0
to Length(LParams)-1
do
if LParams[LIndex].ParamType.Handle<>Args[LIndex].TypeInfo
then
begin
Found:=False;
Break;
end;
end;
if Found
then Break;
end;
if (LMethod<>
nil)
and Found
then
Result:=LMethod.Invoke(Instance, Args)
else
raise Exception.CreateFmt('
method %s not found',[MethodName]);
end;
Hat da wer eine Idee?