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!
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!