[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