Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
COM.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
6
7#include "HRESULTErrorException.h"
8
10
11 /*
12 ********************************************************************************
13 ********************************** COMInitializer ******************************
14 ********************************************************************************
15 */
16 inline COMInitializer::COMInitializer (COINIT initFlag, bool worksWithAnyCoInitFlag)
17 {
18 using namespace Characters::Literals;
19 Debug::TraceContextBumper ctx{"Execution::Platform::Windows::COMInitializer::CTOR"};
20 HRESULT hr = ::CoInitializeEx (nullptr, initFlag);
21 switch (hr) {
22 case S_OK:
23 fNeedsShutdown_ = true;
24 return;
25 case S_FALSE:
26 fNeedsShutdown_ = true;
27 return; // harmless, already initialized
28 case RPC_E_CHANGED_MODE: {
29 if (worksWithAnyCoInitFlag) {
30 fNeedsShutdown_ = true;
31 DbgTrace ("RPC_E_CHANGED_MODE being ignored"_f);
32 return; // harmless, already initialized and we don't care how
33 }
34 else {
35 ThrowIfErrorHRESULT (RPC_E_CHANGED_MODE);
36 }
37 }
38 default:
40 }
41 }
42 inline COMInitializer::~COMInitializer ()
43 {
44 Debug::TraceContextBumper ctx{"Execution::Platform::Windows::COMInitializer::~COMInitializer"};
45 if (fNeedsShutdown_) {
46 ::CoUninitialize ();
47 }
48 }
49
50}
#define DbgTrace
Definition Trace.h:309