]Hallo zusammen,
ich versuche hier gerade mit
RTTI zu arbeiten, habe aber ein merkwürdiges Problem ...
Folgende Deklarationen:
Code:
type R = record f: string end;
type PR = ^R;
type C1 = class
X: PR;
end;
type C2 = class
X: ^R;
end;
procedure Test(C: TClass);
var
Ctx: TRttiContext;
T: TRttiType;
F: TRttiField;
begin
Ctx := TRttiContext.Create;
try
T := Ctx.GetType(C);
for F in T.GetFields do
begin
if Assigned(F.FieldType) then
Writeln(F.FieldType.ClassName)
else
Writeln('Schock!').
end;
finally
Ctx.Free;
end;
end;
Rein theoretisch sind m.E. beide Klassen identisch (?).
Frage ich nun mit
RTTI die Felder der Klasse ab, bekomme ich bei C1 die erwarteten Werte, d.h.
das Feld X hat den FieldType "TRttiPointerType", so soll es sein.
Mache ich das Ganze mit C2 existiert zwar das Feld X, aber der gelieferte FieldType ist nil und
nicht wie erwartet "TRttiPointerType"
Denke ich hier falsch, oder kann mir das irgendjemand erklären?
Gruß Stephan