Passing parameters from managed to unmanaged code
<p>I have to use a method from a library that has the following signature in the header file:</p>

<pre><code>NKREMOTELIB_API int __stdcall GetEvfFrame(
    const unsigned char*&amp; buffer,
    size_t&amp; size,
    NKRemoteEvfDisplayInfo&amp; displayInfo);
</code></pre>

<p>I am calling these from c# using the following:</p>

<pre><code>[DllImport("NKRemoteLib.dll")]
public static extern int GetEvfFrame(out IntPtr buffer, out IntPtr size, out NKRemoteEvfDisplayInfo displayInfo);

private void Test() {
    IntPtr size = new IntPtr();
    IntPtr buffer = new IntPtr();
    NKRemoteEvfDisplayInfo displayInfo;
    int res = GetEvfFrame(out buffer, out size, out displayInfo);
}
</code></pre>

<p>I have displayInfo defined as a struct in c# as well.</p>

<p>My question is where there is any significance to the ampersand in the function signature in the header file? Why size_t&amp; instead of size_t or char*&amp; instead of char*?                     </p>
