<div dir="ltr">On Tue, Feb 11, 2014 at 4:52 PM, Marco van de Voort <span dir="ltr"><<a href="mailto:marcov@stack.nl" target="_blank">marcov@stack.nl</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="">In our previous episode, Mark Morgan Lloyd said:<br>
> If a method a.WriteBuff() is passed another method b.finish() as a<br>
> parameter, can it access b before calling finish(), or would this<br>
> require an explicit parameter?<br>
><br>
> If yes, how?<br>
<br>
</div>tobject(tmethod(func).data)<br></blockquote></div><br><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">One word of caution though: Not sure about FPC but in Delphi a caller may pass a class method instead of an instance method to a method variable. In this case the correct typecast would be:<br>

</div><br><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">T</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">Class(tmethod(func).data)<br>

<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">and AFAIK there is no safe way to test if the bare pointer TMethod.Data points to an instance or a class VMT in order to do the correct cast without AVs. Jedi code library (JCL) has an IsObject() and an IsClass() function but I have found them not to be fullproof and can raise AVs as well.<br>

<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">Maybe the OP could consider using interfaces instead of method variables.<br></div><br><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">

--<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">Constantine.<br></div></div></div>