Announcement

Collapse
No announcement yet.

Mit RTTI auf tkDynArray zugreifen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mit RTTI auf tkDynArray zugreifen

    Ich möchte mit RTTI Inhalte von published Properties von beliebigen Klassen auslesen. Während ich mit ordinalen Typen, Strings und Klassen keine Probleme habe, habe ich noch keine Lösung für Dynamische Arrays gefunden.

    Nach verschiedenen Versuche probierte ich es mit der Umwandlung in ein Variant Array. Der unterstehende Code (Procedure Fetch) funktioniert inzwischen für
    Properties, welche direkt auf eine Member Variable verweisen (Property Test1). Mit Properties, welche auf eine Getter-Methode verweisen (Property Test2), läuft diese Methode nicht.

    Gibt es eine Lösung auf die Elemente eines dynamische Arrays direkt zu zugreifen, ohne den Umweg über Variants?
    <PRE>
    procedure Fetch(Instance: TObject; const PropName: string);
    var
    PropInfo: PPropInfo;
    TypeData: PTypeData;
    Data: variant;
    DynArray: Pointer;
    begin
    PropInfo := GetPropInfo(Instance.ClassInfo, PropName);
    case PropInfo^.PropType^^.Kind of
    ...
    tkDynArray:
    begin
    DynArray := Pointer(GetOrdProp(Instance,PropName));
    DynArrayToVariant(Data, DynArray, PropInfo^.PropType^);
    // Inhalt von variant Data auslesen
    end;
    end;
    end;
    </PRE>
    Test Klasse für Dynamische Arrays:
    <PRE>
    {$TYPEINFO ON}
    type
    TTestArr = array of integer;
    TTest = class
    private
    fTest1: TTestArr;
    function GetTest2: TTestArr;
    published
    property Test1: TTestArr read fTest1;
    property Test2: TTestArr read GetTest2;
    end;
    </PRE>

    Ich verwende Delphi 7 für diese Anwendung.

    Besten Dank für Tips!
    Schneider Infosystems AG, Schweiz

    http://www.schneider-infosys.ch
Working...
X