[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