/// <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!
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.
7/25/2015 5:25:25 PM - -5.202.143.191
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.