[DllImport("ole32.dll")]
static extern int IIDFromString([MarshalAs(UnmanagedType.LPWStr)] string lpsz,
out Guid lpiid);
None.
None.
I find it better to turn off PreserveSig for methods that return an HRESULT and have a trailing out parameter, providing that the HRESULT does not have more that one success code (typically S_OK only). This results in a slightly cleaner syntax where the out parameter becomes the return value and a failing HRESULT results in an exception.
[DllImport("ole32.dll", CharSet=CharSet.Unicode, PreserveSig=false)]
static extern Guid IIDFromString(string lpsz);
using System.Diagnostics;
using System.Runtime.Interop;
PreserveSig=true
class Program
{
[DllImport("ole32.dll", CharSet=CharSet.Unicode)]
static extern int IIDFromString(string lpsz, out Guid lpiid);
[STAThread()]
static void Main(string[] args)
{
Guid g;
string iid = "{00000000-0000-0000-C000-000000000046}"; // IUnknown
int result = IIDFromString(iid, out g);
Debug.Assert(result == 0);
Debug.Assert(g.ToString("B") == "{00000000-0000-0000-C000-000000000046}");
}
}
PreserveSig=false
class Program
{
[DllImport("ole32.dll", CharSet=CharSet.Unicode, PreserveSig=false)]
static extern Guid IIDFromString(string lpsz);
[STAThread()]
static void Main(string[] args)
{
string iid = "{00000000-0000-0000-C000-000000000046}"; // IUnknown
Guid g = IIDFromString(iid);
Debug.Assert(g.ToString("B") == "{00000000-0000-0000-C000-000000000046}");
}
}
System.Guid - overloaded constructor that takes a string.