<div dir="ltr">Hey Neale,<div><br></div><div>You can safely pass interior pointers to pinvoke without fearing the object been collected for the duration of the call.</div><div>Mind that you have to correctly use specify in/out/ref depending on the copy semantics you need.</div>
<div><br></div><div>Problems only arise when native keeps that pointer after the call finishes, this can result in the object been moved</div><div>as the GC has no visibility into the native heap.</div><div><br></div><div>
For those cases you can either create a pinning GC handle to the victim object or you can allocate a chunk of native</div><div>memory that will be shared between managed and native to store the desired value. Both options suck, TBH.</div>
<div><br></div><div>I'd say go with the native chunk of code if you can't lexically scope the pinning regions, it will be more reliable as</div><div>failing to dispose the object won't lead to permanent leaks.</div>
<div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Aug 22, 2014 at 11:11 AM, Neale Ferguson <span dir="ltr"><<a href="mailto:NealeFerguson@verizon.net" target="_blank">NealeFerguson@verizon.net</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Is that just a comment on my ref IntPtr question or the use of ref with the OCIxxxx stuff in general?<br>
<div class="HOEnZb"><div class="h5"><br>
On Aug 22, 2014, at 10:45 AM, Rodrigo Kumpera <<a href="mailto:kumpera@gmail.com">kumpera@gmail.com</a>> wrote:<br>
<br>
> Mono does conservative scanning of the native stack, so once the pointer has crossed over to native, the containing object will remain pinned.<br>
</div></div></blockquote></div><br></div>