M
Morgan Cheng
In http://www.pinvoke.net/default.aspx/urlmon.FindMimeFromData, it is
suggested to use FindMimeFromData in below way.
[DllImport("urlmon.dll", CharSet = CharSet.Unicode, ExactSpelling =
true, SetLastError = false)]
static extern int FindMimeFromData(IntPtr pBC,
[MarshalAs(UnmanagedType.LPWStr)] string pwzUrl,
[MarshalAs(UnmanagedType.LPArray,
ArraySubType=UnmanagedType.I1, SizeParamIndex=3)]
byte[] pBuffer,
int cbSize,
[MarshalAs(UnmanagedType.LPWStr)] string pwzMimeProposed,
int dwMimeFlags,
out IntPtr ppwzMimeOut,
int dwReserved);
I tried in another way by have output parameter ppwzMimeOut to be
StringBuilder. It also works.
If I have the function return a IntPtr. Then, I should free the
returned pointer with Marshal.FreeCoTaskMem, right? While, I have no
need to free a StringBuilder(actually I have no idea how to). It looks
like use StringBuilde is better. Is there any trick that original
author have the output parameter as IntPtr?
suggested to use FindMimeFromData in below way.
[DllImport("urlmon.dll", CharSet = CharSet.Unicode, ExactSpelling =
true, SetLastError = false)]
static extern int FindMimeFromData(IntPtr pBC,
[MarshalAs(UnmanagedType.LPWStr)] string pwzUrl,
[MarshalAs(UnmanagedType.LPArray,
ArraySubType=UnmanagedType.I1, SizeParamIndex=3)]
byte[] pBuffer,
int cbSize,
[MarshalAs(UnmanagedType.LPWStr)] string pwzMimeProposed,
int dwMimeFlags,
out IntPtr ppwzMimeOut,
int dwReserved);
I tried in another way by have output parameter ppwzMimeOut to be
StringBuilder. It also works.
If I have the function return a IntPtr. Then, I should free the
returned pointer with Marshal.FreeCoTaskMem, right? While, I have no
need to free a StringBuilder(actually I have no idea how to). It looks
like use StringBuilde is better. Is there any trick that original
author have the output parameter as IntPtr?