CoGetInterfaceAndReleaseStream (ole32)
Last changed: developer-99.35.97.16

.
Summary

C# Signature:

[DllImport("ole32.dll")]
static extern int CoGetInterfaceAndReleaseStream(IStream pStm, [In] ref
   Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

In my experience, the above signature causes an internal access violation (caught before the function returns).

After that, even though the function returns success (S_OK), the resulting object can sometimes be unusable.

The exception happened every time, but the unusable result was intermittent.

Suggested fix:

Instead of

  [MarshalAs(UnmanagedType.IUnknown)] out object ppv

Use

  [Out] out System.IntPtr ppv

Then, call the function like this:

IntPtr unk = 0;

try{

Marshal.ThrowExceptionForHR(CoGetInterfaceAndReleaseStream(pStm, riid, out unk));

object ppv = Marshal.GetObjectForIUnknown(unk);

}

finally{

Marshal.Release(unk);

}

Sample Code:

Please add some!

Alternative Managed API:

Do you know one? Please contribute it!

Documentation