Switch back to apartment threaded COM initialization, which was the previous default.

We do succeed now if the application previously initialized COM in multi-threaded mode.
Sam Lantinga 2013-12-27 10:18:19 -08:00
parent 6f6c76a6a5
commit 6915319683
1 changed files with 9 additions and 1 deletions

View File

@ -45,7 +45,15 @@ WIN_SetError(const char *prefix)
HRESULT
WIN_CoInitialize(void)
{
const HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
/* SDL handles any threading model, so initialize with the default, which
is compatible with OLE and if that doesn't work, try multi-threaded mode.
If you need multi-threaded mode, call CoInitializeEx() before SDL_Init()
*/
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (hr == RPC_E_CHANGED_MODE) {
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
}
/* S_FALSE means success, but someone else already initialized. */
/* You still need to call CoUninitialize in this case! */