IIDFromString (ole32)
Last changed: anonymous

.
Summary
Converts a string into an interface identifier (IID).

C# Signature:

[DllImport("ole32.dll")]
static extern int IIDFromString([MarshalAs(UnmanagedType.LPWStr)] string lpsz,
   out Guid lpiid);

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

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);

C# Sample Code:

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}");
    }
}

Alternative Managed API:

System.Guid - overloaded constructor that takes a string.

Documentation