Einzelnen Beitrag anzeigen

Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#1

RTTI Attribute mit Variant: Invalid variant type

  Alt 28. Okt 2012, 01:55
Delphi-Version: XE
Nabend!

Ich hantiere gerade mit Attributes und Variants rum und hänge fest. Hier mein Attribut:

Delphi-Quellcode:
type
  MyDefaultAttr = class(TCustomAttribute)
  private
    FDefaultValue: Variant;
  public
    constructor Create(DefaultValue: Variant); overload;
    property DefaultValue: Variant read FDefaultValue;
  end;

constructor MyDefaultAttr.Create(DefaultValue: Variant);
begin
  inherited Create;
  FDefaultValue := DefaultValue;
end;
Und hier wie ich sie benutze:

Delphi-Quellcode:
uses Rtti, TypInfo;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FTestProp: boolean;
  public
    [MyDefaultAttr] // Funktioniert
    property FirstTestProp: boolean read FTestProp write FTestProp;
    [MyDefaultAttr(true)] // Fehler
    property SecondTestProp: boolean read FTestProp write FTestProp;
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Context: TRttiContext;
  TypeInfo: TRttiType;
  Prop: TRttiProperty;
begin
  Context := TRttiContext.Create;
  try
    TypeInfo := Context.GetType(Self.ClassType);
    for Prop in TypeInfo.GetProperties do
      Prop.GetAttributes; // Exception
  finally
    Context.Free;
  end;
end;
Mit [MyDefaultAttr] gehts, sobald ich aber auf das Attribut eines Properties zugreifen möchte, das mit einem DefaultValue erstellt wurde [MyDefaultAttr(true)] , bekomm ich eine Exception:
First chance exception at $7524C41F. Exception class EVariantBadVarTypeError with message 'Invalid variant type'.

Hat da jemand eine Idee?


Beste Grüße
Björn
  Mit Zitat antworten Zitat