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

So FieldAddress can only access published fields?

Regards,
Torsten.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to