![]() |
Delphi-Version: XE
RTTI Attribute mit Variant: Invalid variant type
Nabend!
Ich hantiere gerade mit Attributes und Variants rum und hänge fest. Hier mein Attribut:
Delphi-Quellcode:
Und hier wie ich sie benutze:
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;
Delphi-Quellcode:
Mit
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;
Delphi-Quellcode:
gehts, sobald ich aber auf das Attribut eines Properties zugreifen möchte, das mit einem DefaultValue erstellt wurde
[MyDefaultAttr]
Delphi-Quellcode:
, bekomm ich eine Exception:
[MyDefaultAttr(true)]
First chance exception at $7524C41F. Exception class EVariantBadVarTypeError with message 'Invalid variant type'. Hat da jemand eine Idee? Beste Grüße Björn |
AW: RTTI Attribute mit Variant: Invalid variant type
Ich würde es mal als Bug definieren und diesen gibt es immernoch im XE3.
Am Besten solltest du mal im QC 'ne Meldung einreichen. (falls es nicht schon Eine gibt) Das Problem ist nicht direkt der Variant, sondern der Weert, welchen du übergibst. Vorallem scheint es da mit Typen ein Problem zu geben, welche der Variant standardmäßig selbst nicht unterstützt. Zitat:
Beim Auslesen und Übersetzen dieses Wertes gibt es dann den Fehler. ![]() Du kannst es gerne mal mit
Delphi-Quellcode:
versuchen.
[MyDefaultAttr(2)]
Delphi-Quellcode:
funktioniert aber.
[MyDefaultAttr(Integer(2))]
Leider funktioniert das Casten nach Boolean/ByteBool/WordBool/LongBool nicht. (wobei Variant den WordBool eigentlich kennt) |
AW: RTTI Attribute mit Variant: Invalid variant type
Ach so'n Mist:
![]() Dann muss ich wohl was drumrum basteln. Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz