diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2016-08-12 18:00:49 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2016-08-12 18:00:49 +0200 |
commit | 9040b187a1c4fa380f8a12207b9dd6d04b3a10ac (patch) | |
tree | 115e1351571d690c1261a9d512e6d44e717f3051 /compat/win32-com.cpp | |
parent | 13a18b149764509a3f460be86590250cdcf690fb (diff) |
all: rename modules s#^opentrack-##. and opentrack -> api
Adjust usages.
Diffstat (limited to 'compat/win32-com.cpp')
-rw-r--r-- | compat/win32-com.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/compat/win32-com.cpp b/compat/win32-com.cpp new file mode 100644 index 00000000..dd7c24a8 --- /dev/null +++ b/compat/win32-com.cpp @@ -0,0 +1,60 @@ +#ifdef _WIN32 + +#include "win32-com.hpp" + +#include <QString> +#include <QThread> +#include <QDebug> + +bool OPENTRACK_COMPAT_EXPORT init_com_threading(com_type t) +{ + static thread_local com_type initialized = com_type(-1); + + if (initialized != com_type(-1)) + { + if (t != initialized) + { + QString tp("invalid type"); + switch (t) + { + case com_apartment: + tp = "apartment threaded"; + break; + case com_multithreaded: + tp = "multithreaded"; + break; + } + + qDebug() << "COM for thread" + << QThread::currentThread() << QThread::currentThreadId() + << "already initialized to" << tp; + + return false; + } + + return true; + } + + HRESULT ret = CoInitializeEx(0, t); + + if (ret != S_OK && ret != S_FALSE) + { + qDebug() << "CoInitializeEx failed:" << ret << GetLastError(); + return false; + } + + if (t == com_apartment) + { + ret = OleInitialize(nullptr); + + if (ret != S_OK && ret != S_FALSE) + qDebug() << "OleInitialize() failed:" << ret << GetLastError(); + + return false; + } + + initialized = t; + + return true; +} +#endif |