[fpc-pascal] FieldAddress

Torsten Bonde Christiansen tc at epidata.info
Tue Feb 3 12:55:53 CET 2015


On 2015-02-03 12:30, silvioprog wrote:
> On Tue, Feb 3, 2015 at 6:17 AM, Torsten Bonde Christiansen 
> <tc at epidata.info <mailto: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.

So FieldAddress can only access published fields?

Regards,
Torsten.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20150203/f8191290/attachment.html>


More information about the fpc-pascal mailing list