From 44bd1302e3d6d2005b77a712ebced14d32bd9ccd Mon Sep 17 00:00:00 2001 From: Jacques Caron Date: Tue, 21 Jan 2025 23:56:22 +0100 Subject: [PATCH] Handle alternate COM concurrency mode If the module is used in a program which has already initialized COM in Apartement concurrency mode (for instance within an Electron project), CoInitializeEx will return error RPC_E_CHANGED_MODE. In that case, try initializing again in that mode. --- src/wmi_wrapper.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/wmi_wrapper.cpp b/src/wmi_wrapper.cpp index a35c9ff..2b1976c 100644 --- a/src/wmi_wrapper.cpp +++ b/src/wmi_wrapper.cpp @@ -223,6 +223,11 @@ namespace wmi_wrapper // Initialize COM. hres = CoInitializeEx(0, COINIT_MULTITHREADED); { + if (FAILED(hres) && hres == RPC_E_CHANGED_MODE) + { + // Was already initialized in a different mode, switch + hres = CoInitializeEx(0, COINIT_APARTMENTTHREADED); + } if (FAILED(hres)) { // Failed to initialize COM library