libobs: Robust COM initialization
Qt seems to force STA, so it's misleading to ask for MTA and ignore the failure result, so just ask for STA. Also, don't uninitialize COM if initialization failed.
This commit is contained in:
parent
7d3e086e6f
commit
66d78275e2
@ -1259,9 +1259,15 @@ void obs_init_win32_crash_handler(void)
|
||||
initialize_crash_handler();
|
||||
}
|
||||
|
||||
void initialize_com(void)
|
||||
bool initialize_com(void)
|
||||
{
|
||||
CoInitializeEx(0, COINIT_MULTITHREADED);
|
||||
const HRESULT hr = CoInitializeEx(0, COINIT_APARTMENTTHREADED);
|
||||
const bool success = SUCCEEDED(hr);
|
||||
if (success)
|
||||
blog(LOG_INFO, "CoInitializeEx succeeded: 0x%08X", hr);
|
||||
else
|
||||
blog(LOG_ERROR, "CoInitializeEx failed: 0x%08X", hr);
|
||||
return success;
|
||||
}
|
||||
|
||||
void uninitialize_com(void)
|
||||
|
@ -871,8 +871,9 @@ static bool obs_init(const char *locale, const char *module_config_path,
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
extern void initialize_com(void);
|
||||
extern bool initialize_com(void);
|
||||
extern void uninitialize_com(void);
|
||||
static bool com_initialized = false;
|
||||
#endif
|
||||
|
||||
/* Separate from actual context initialization
|
||||
@ -933,7 +934,7 @@ bool obs_startup(const char *locale, const char *module_config_path,
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
initialize_com();
|
||||
com_initialized = initialize_com();
|
||||
#endif
|
||||
|
||||
success = obs_init(locale, module_config_path, store);
|
||||
@ -1048,6 +1049,7 @@ void obs_shutdown(void)
|
||||
bfree(cmdline_args.argv);
|
||||
|
||||
#ifdef _WIN32
|
||||
if (com_initialized)
|
||||
uninitialize_com();
|
||||
#endif
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user