delphi - Reading TValue from TRttiProperty fails (Property Type: set of Byte) -


i defined type set of byte, interface , class implements interface. interface has property of type ttestsetofbyte + getter , setter. nothing special @ all.

type  ttestsetofbyte = set of byte;   itestinterface = interface     ['{bcf0cec2-f999-4e8a-a732-416f343c1629}']     function getpropsetofbyte: ttestsetofbyte;     procedure setpropsetofbyte(const value: ttestsetofbyte);     property propsetofbyte: ttestsetofbyte read getpropsetofbyte write setpropsetofbyte;   end;    ttestclass3 = class(tinterfacedobject, itestinterface)   private     fsetofbyte: ttestsetofbyte;     function getpropsetofbyte: ttestsetofbyte;     procedure setpropsetofbyte(const value: ttestsetofbyte);   public     constructor create;     property propsetofbyte: ttestsetofbyte read getpropsetofbyte write setpropsetofbyte;   end; 

the problem when try read value of propsetofbyte property delphi throws eaccessviolation , not understand why. properties of other types(int, string) work fine.

here test code:

procedure ttestutlrtticomparer.deleteme; var   i: integer;   instance1: itestinterface;   object1: tobject;   rtticontext: trtticontext;   rttiprop: trttiproperty;   rttivalue1: tvalue;   type1: trttitype; begin   instance1 := ttestclass3.create;   check(instance1.propsetofbyte = [1,4], 'making sure getter works!');   instance1.propsetofbyte := [3,4];   check(instance1.propsetofbyte = [3,4], 'making sure setter works!');    object1 := (instance1 tobject);   check(assigned(object1));    rtticontext := trtticontext.create;   try     type1 := rtticontext.gettype(object1.classinfo);      // properties pruefen     := 0 high(type1.getproperties)     begin       rttiprop :=  type1.getproperties[i];       if rttiprop.name = 'propsetofbyte'       begin         rttivalue1 := rttiprop.getvalue(object1); // check fails eacessviolation!!!       end;     end;       rtticontext.free;   end; end; 

i using xe-2.

thank you!

it crashes when trttitype.getvalue() (more specifically, invoke() function in system.rtti unit) tries call ttestclass3.getpropsetofbyte(). correct self pointer being passed in, result parameter nil, crash occurs when getpropsetofbyte() tries assign fsetofbyte result.

in short, call stack not being setup correctly rtti system set-based properties. have reproduced crash in xe2, xe6, , xe7, , have filed bug report embarcadero:

trttiproperty.getvalue() crash on set-based property https://quality.embarcadero.com/browse/rsp-10206


Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

gradle error "Cannot convert the provided notation to a File or URI" -

ios - Possible to get UIButton sizeThatFits to work? -