progidfromclsid (ole32)
Last changed: 65.54.188.147

.
Summary
Retrieves the ProgID for a given CLSID.

C# Signature:

[DllImport("ole32.dll")]
static extern int ProgIDFromCLSID([In] ref Guid clsid,
   [MarshalAs(UnmanagedType.LPWStr)] out string lplpszProgID);

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 string ProgIDFromCLSID([In()]ref Guid clsid);

C# Sample Code:

using System.Diagnostics;
using System.Runtime.Interop;

PreserveSig=true

class Program
{
    [DllImport("ole32.dll")]
    static extern int ProgIDFromCLSID([In()]ref Guid clsid, [MarshalAs(UnmanagedType.LPWStr)]out string lplpszProgID);

    [STAThread()]
    static void Main(string[] args)
    {
       Guid   g = new Guid("88D969C0-F192-11D4-A65F-0040963251E5"); // MSXML 4.0 DOM.
       string progId;
       int    result = ProgIDFromCLSID(ref g, out progId);

       Debug.Assert(result == 0);
       Debug.Assert(progId == "Msxml2.DOMDocument.4.0");
    }
}

PreserveSig=false

class Program
{
    [DllImport("ole32.dll", CharSet=CharSet.Unicode, PreserveSig=false)]
    static extern string ProgIDFromCLSID([In()]ref Guid clsid);

    [STAThread()]
    static void Main(string[] args)
    {
       Guid   g = new Guid("88D969C0-F192-11D4-A65F-0040963251E5"); // MSXML 4.0 DOM.
       string progId = ProgIDFromCLSID(ref g);

       Debug.Assert(progId == "Msxml2.DOMDocument.4.0");
    }
}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation