<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Nov 28, 2016 at 2:31 PM, Ondrej Pokorny <span dir="ltr"><<a href="mailto:lazarus@kluug.net" target="_blank">lazarus@kluug.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 28.11.2016 17:37, Ondrej Pokorny wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Is SetObjectProp safe?<br>
</blockquote>
<br>
OK, no it is not - it doesn't increment the reference count for properties without a setter:<br>
property Data: TBytes write FBytes;<br>
<br>
Ondrej</blockquote></div><div><br></div><div>Yes, and it seems you can't handle properties setting field, eg: "property Data: TBytes read FData write FData".</div><div><br></div><div>An workaround just for testing:</div><div><br></div><div><div>procedure SetDynArrayProp(AInstance: TObject; APropInfo: PPropInfo; const AValue);</div><div>begin</div><div>  // Caution: it works only with fields! But we can implement the full version checking methods too, getting some ideas from SetRawInterfaceProp<br></div><div>  CopyArray(PPointer(Pointer(<wbr>AInstance)+PtrUInt(APropInfo^.<wbr>SetProc)), @AValue, APropInfo^.PropType, 1);</div><div>end;</div></div><div><br></div><div>...</div><div><div>//    {$IFDEF FPC}</div><div>    SetDynArrayProp(O, PropInfo, A);</div><div>//    {$ELSE}</div><div>//    SetDynArrayProp(O, PropInfo, A);</div><div>//    {$ENDIF}</div></div><div>...</div><div><br></div><div>Anyway including (Get)SetDynArrayProp() to typinfo solve the problem because it can check if property's set is a field or a method.</div><div><br></div>-- <br><div class="m_-4313259759182576892gmail-m_5203446582074732597gmail-m_5067601338609126696gmail_signature"><div dir="ltr"><div>Silvio Clécio</div></div></div>
</div></div>