// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/win/scoped_com_initializer.h" #include "base/logging.h" namespace base { namespace win { ScopedCOMInitializer::ScopedCOMInitializer() { Initialize(COINIT_APARTMENTTHREADED); } ScopedCOMInitializer::ScopedCOMInitializer(SelectMTA mta) { Initialize(COINIT_MULTITHREADED); } ScopedCOMInitializer::~ScopedCOMInitializer() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); if (Succeeded()) CoUninitialize(); } bool ScopedCOMInitializer::Succeeded() const { return SUCCEEDED(hr_); } void ScopedCOMInitializer::Initialize(COINIT init) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); hr_ = CoInitializeEx(NULL, init); DCHECK_NE(RPC_E_CHANGED_MODE, hr_) << "Invalid COM thread model change"; } } // namespace win } // namespace base