diff options
author | Andrew Knight <andrew.knight@digia.com> | 2014-06-13 11:53:11 +0300 |
---|---|---|
committer | Andrew Knight <andrew.knight@digia.com> | 2014-06-14 09:51:51 +0200 |
commit | 47ec82cc6adf991e0c2d1f83bfeb957adfd9e1fa (patch) | |
tree | f9dbaf8e42ce4e797935bbd1d6e6529293c36844 | |
parent | 4f4be00ed512dee93cf0cfae9f5a78168b8cdf3e (diff) | |
download | qttools-47ec82cc6adf991e0c2d1f83bfeb957adfd9e1fa.tar.gz |
winrtrunner: Move COM initialization into the private class
This ensures Appx engine subclasses get COM initialized in the same way.
Change-Id: Ib376842f808488353d19fe36c76bb2411332c0e4
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
-rw-r--r-- | src/winrtrunner/appxengine.cpp | 8 | ||||
-rw-r--r-- | src/winrtrunner/appxengine_p.h | 16 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/winrtrunner/appxengine.cpp b/src/winrtrunner/appxengine.cpp index b79668bdb..0ef84655b 100644 --- a/src/winrtrunner/appxengine.cpp +++ b/src/winrtrunner/appxengine.cpp @@ -135,8 +135,10 @@ AppxEngine::AppxEngine(Runner *runner, AppxEnginePrivate *dd) : d_ptr(dd) { Q_D(AppxEngine); + if (d->hasFatalError) + return; + d->runner = runner; - d->hasFatalError = false; d->processHandle = NULL; d->pid = -1; d->exitCode = UINT_MAX; @@ -147,9 +149,7 @@ AppxEngine::AppxEngine(Runner *runner, AppxEnginePrivate *dd) return; } - HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); - CHECK_RESULT_FATAL("Failed to initialize COM.", return); - + HRESULT hr; hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Foundation_Uri).Get(), IID_PPV_ARGS(&d->uriFactory)); CHECK_RESULT_FATAL("Failed to instantiate URI factory.", return); diff --git a/src/winrtrunner/appxengine_p.h b/src/winrtrunner/appxengine_p.h index dde97b73a..c2e4ad524 100644 --- a/src/winrtrunner/appxengine_p.h +++ b/src/winrtrunner/appxengine_p.h @@ -56,7 +56,21 @@ struct IAppxFactory; class AppxEnginePrivate { public: - virtual ~AppxEnginePrivate() { } + AppxEnginePrivate() + { + HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); + if (FAILED(hr)) { + qCWarning(lcWinRtRunner) << "Failed to initialize COM:" << qt_error_string(hr); + hasFatalError = true; + } + hasFatalError = false; + } + + virtual ~AppxEnginePrivate() + { + CoUninitialize(); + } + Runner *runner; bool hasFatalError; |