On Tue, Feb 3, 2015 at 6:17 AM, Torsten Bonde Christiansen <t...@epidata.info> wrote:
> Hi, > > What does it take for a class to access a field using FieldAddress(...)? > > I have tried with both typeinfo on/off ({M+}), placing the field in > private/protected/public/published > sections but to no avail. > > My simple code is: > > TMyObject = class > private > FRef: TMyObject; > procedure SetRef(AValue: TMyObject); > public > property Ref: TMyObject read FRef write SetRef; > end; > > > then i have tried to get the adress in two ways: > > AMyObject.FieldAddress('FRef'); //returns nil > AMyObject.FieldAddress('Ref'); //also returns nil > > If i run my code through debugger, the VMT FieldTable is empty suggesting > no information is > created. This happens in all cases of typeinfo on/off and differenc > sections... > > What can i do to make the fieldadress accessible? > > Regards, > Torsten. > This method return a field address, eg: {$M+} TMyObject = class(TObject) FRef: TMyObject; end; ... var VMyObject: TMyObject; VRef: Pointer; begin VMyObject := TMyObject.Create; VRef := VMyObject.FieldAddress('FRef'); If you whant to get a property, use the TypInfo.GetObjectProp function. -- Silvio Clécio My public projects - github.com/silvioprog
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal