CoInitializeEx (ole32)
Last changed: -5.202.143.191

.
Summary
CoInitializeEx initializes the COM library for use by the calling thread, sets the thread's concurrency model, and creates a new apartment for the thread if one is required. Values for the dwCoInit parameter are taken from the COINIT enumeration. However, since pinvoke is a dotNET construct you should be aware that dotNET already does a COM initialization and therefore calling a CoInitializeEx function most likely will not do what you expect. This problem occurs when trying to instantiate a COM object from within dotNET where the COM objects threading model is different from dotNETs. Search on Common Language Runtime or CLR and COINIT_APARTMENTTHREADED to find posts on this issue.

C# Signature:

    /// <returns>If function succeeds, it returns 0(S_OK). Otherwise, it returns an error code.</returns>
    [DllImport("ole32.dll", CharSet = CharSet.Auto, SetLastError = true, CallingConvention = CallingConvention.StdCall)]
    public static extern int CoInitializeEx(
        [In, Optional] IntPtr pvReserved,
        [In]  COINIT dwCoInit //DWORD
        );

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

// Note: PreserveSig=false allows .NET interop to handle processing the returned HRESULT and throw an exception on failure

    public enum COINIT : uint //tagCOINIT
    {
        COINIT_MULTITHREADED = 0x0, //Initializes the thread for multi-threaded object concurrency.
        COINIT_APARTMENTTHREADED = 0x2, //Initializes the thread for apartment-threaded object concurrency
        COINIT_DISABLE_OLE1DDE = 0x4, //Disables DDE for OLE1 support
        COINIT_SPEED_OVER_MEMORY = 0x8, //Trade memory for speed
    }

Alternative Managed API:

Do you know one? Please contribute it!

Documentation