Einzelnen Beitrag anzeigen

ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
376 Beiträge
 
Delphi 10.4 Sydney
 
#1

class function per Rtti aufrufen

  Alt 12. Feb 2016, 21:57
Delphi-Version: 5
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?
Andreas Schachtner

Geändert von ConstantGardener (12. Feb 2016 um 22:03 Uhr) Grund: ...unter XE7
  Mit Zitat antworten Zitat