1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
program trtti6;
{$mode objfpc}{$H+}
uses
typinfo;
type
{$M+}
TReferredClass = class
end;
{$M-}
TClassRef = class of TReferredClass;
{$M+}
TClass = class
private
FRef: TClassRef;
published
property Ref: TClassRef read FRef;
end;
{$M-}
TPtr = ^UnicodeString;
var
Info: PTypeInfo;
Data: PTypeData;
begin
// first check TClass.Ref property
Info := GetPropInfo(PTypeInfo(TClass.ClassInfo), 'Ref')^.PropType;
if Info^.Kind <> tkClassRef then
halt(1);
Data := GetTypeData(Info);
if Data^.RefType <> TReferredClass.ClassInfo then
halt(2);
// next check TRefferedClass.P method
Info := TypeInfo(TPtr);
if Info^.Kind <> tkPointer then
halt(3);
Data := GetTypeData(Info);
if Data^.RefType <> TypeInfo(UnicodeString) then
halt(4);
end.
|