[DllImport("ole32.dll")]
static extern int CoGetInterfaceAndReleaseStream(IStream pStm, [In] ref
Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);
None.
None.
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);
}
Please add some!
Do you know one? Please contribute it!