| 304 | } // namespace |
| 305 | |
| 306 | nfdresult_t NFD_Init(void) { |
| 307 | // Init COM library. |
| 308 | HRESULT result = |
| 309 | ::CoInitializeEx(nullptr, ::COINIT_APARTMENTTHREADED | ::COINIT_DISABLE_OLE1DDE); |
| 310 | |
| 311 | if (SUCCEEDED(result)) { |
| 312 | needs_uninitialize = true; |
| 313 | return NFD_OKAY; |
| 314 | } else if (result == RPC_E_CHANGED_MODE) { |
| 315 | // If this happens, the user already initialized COM using COINIT_MULTITHREADED, |
| 316 | // so COM will still work, but we shouldn't uninitialize it later. |
| 317 | needs_uninitialize = false; |
| 318 | return NFD_OKAY; |
| 319 | } else { |
| 320 | NFDi_SetError("Failed to initialize COM."); |
| 321 | return NFD_ERROR; |
| 322 | } |
| 323 | } |
| 324 | void NFD_Quit(void) { |
| 325 | if (needs_uninitialize) ::CoUninitialize(); |
| 326 | } |
no test coverage detected