<br><br><div class="gmail_quote">On Sat, Jul 30, 2011 at 6:51 PM, Brian Luczkiewicz <span dir="ltr">&lt;<a href="mailto:brian@sooloos.com">brian@sooloos.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I just thought of a scheme to do non-static delegate marshalling without code generation, but it&#39;s a little bit goofy.<div><br><div><div>Allocate a structure that contains two things:</div><div><br></div><div>(1) the instance ptr that you want to capture</div>

<div>(2) the function ptr for a compile-time-generated invoker that implements the desired unmanaged function signature.</div><div><br></div><div>Then hand this structure off to unmanaged-land as if it were a function pointer.</div>

<div><br></div><div>when you try to execute the function, the kernel will raise a fault. The runtime can notice that it&#39;s in this situation and invoke (2) with (1) either using another compile time generated function to forward the call, or (maybe on x86) by rewriting the stack to push the instance pointer + then jumping to the real function.</div>

<div><br></div><div>There&#39;s obviously a cost associated with the fault. There&#39;s also a chance that the specific implementation of iOS&#39;s limitations would prohibit this (the kernel might murder the process before we get a chance to recover). </div>

<div><br></div><div>Anyways, just a thought..</div><div><div></div><div class="h5"><div></div></div></div></div></div></blockquote></div><br><div>Yes, this would work, but performance would be so horrendous that it won&#39;t be usable.</div>