<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 2015-02-03 12:30, silvioprog wrote:<br>
    </div>
    <blockquote
cite="mid:CAKq_V2Kaz=NZ+wT3zz9Q=Og5-hNDKiD5Zvq+PM-r++G6MJz4Tw@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">On Tue, Feb 3, 2015 at 6:17 AM,
            Torsten Bonde Christiansen <span dir="ltr"><<a
                moz-do-not-send="true" href="mailto:tc@epidata.info"
                target="_blank">tc@epidata.info</a>></span> wrote:<br>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
              <div text="#000000" bgcolor="#FFFFFF"> <font
                  face="monospace">Hi,<br>
                  <br>
                  What does it take for a class to access a field using
                  FieldAddress(...)?<br>
                  <br>
                  I have tried with both typeinfo on/off ({M+}), placing
                  the field in private/protected/public/published<br>
                  sections but to no avail.<br>
                  <br>
                  My simple code is:<br>
                  <br>
                  TMyObject = class<br>
                  private <br>
                    FRef: TMyObject;<br>
                    procedure SetRef(AValue: TMyObject);<br>
                  public<br>
                    property Ref: TMyObject read FRef write SetRef;<br>
                  end;<br>
                  <br>
                  <br>
                  then i have tried to get the adress in two ways:<br>
                  <br>
                  AMyObject.FieldAddress('FRef');   //returns nil</font><br>
                <font face="monospace"><font face="monospace">AMyObject.FieldAddress('Ref');   

                    //also returns nil</font><br>
                  <br>
                  If i run my code through debugger, the VMT FieldTable
                  is empty suggesting no information is<br>
                  created. This happens in all cases of typeinfo on/off
                  and differenc sections...<br>
                  <br>
                  What can i do to make the fieldadress accessible?<br>
                  <br>
                  Regards,<br>
                  Torsten.</font></div>
            </blockquote>
          </div>
          <br clear="all">
          <div>This method return a field address, eg:</div>
          <div><br>
          </div>
          <div>
            <div>{$M+}</div>
            <div>  TMyObject = class(TObject)</div>
            <div>    FRef: TMyObject;</div>
            <div>  end;</div>
          </div>
          <div><br>
          </div>
          <div>...</div>
          <div><br>
          </div>
          <div>
            <div>var</div>
            <div>  VMyObject: TMyObject;</div>
            <div>  VRef: Pointer;</div>
            <div>begin</div>
            <div>  VMyObject := TMyObject.Create;</div>
            <div>  VRef := VMyObject.FieldAddress('FRef');</div>
          </div>
          <div><br>
          </div>
          <div>If you whant to get a property, use the
            TypInfo.GetObjectProp function.</div>
        </div>
      </div>
    </blockquote>
    <br>
    So FieldAddress can only access published fields?<br>
    <br>
    Regards,<br>
    Torsten.<br>
  </body>
</html>