[fpc-pascal] FieldAddress

silvioprog silvioprog at gmail.com
Tue Feb 3 12:30:44 CET 2015


On Tue, Feb 3, 2015 at 6:17 AM, Torsten Bonde Christiansen <tc at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20150203/e7a35251/attachment.html>


More information about the fpc-pascal mailing list