![]() |
Delphi-Version: 5
class function per Rtti aufrufen
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:
Hat da wer eine Idee?
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; |
AW: class function per Rtti aufrufen
Als "Instance" müsste keine Objekt-Instanz (TObject), sondern ein Klassen-Zeiger (TClass) reingegeben werden, denk ich mal.
Schade, daß Emba so blöd/nett war und das "dynamische" generieren von Funktionsdefionitionen etwas erschwert haben, sonst hätte man auch einfach das ganze als "billige" Prozedur, mit einem zusätzlichen Self-Parameter ansprechen können. |
AW: class function per Rtti aufrufen
Hallo Himitsu,
danke erstmal für den Hinweis. Ich hab das zwischenzeitlich anders umgesetzt (mit einem Dictionary<TClassName,TSQLRecordInfo>, ich suche mir per RTTI alle PoDo's im Programm raus, lese bestimmte Attribute zur Datentabelle (Name, ID, MasterID) aus und checke dann das Datenformat/Fieldliste, setze Insert und Update-Statements zusammen usw. also ein ORM für Arme). Das Problem ist mit dem Aufruf der Funktion nicht zu Ende. Das setzen einer Class Var ist auch ein Problem da man die Class Var per RTTI nicht findet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz