37 lines · plain
1//==- llvm/Support/Windows/COM.inc - Windows COM Implementation -*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file implements the Windows portion of COM support.10//11//===----------------------------------------------------------------------===//12 13//===----------------------------------------------------------------------===//14//=== WARNING: Implementation here must contain only Windows code.15//===----------------------------------------------------------------------===//16 17#include <objbase.h>18 19namespace llvm {20namespace sys {21 22InitializeCOMRAII::InitializeCOMRAII(COMThreadingMode Threading,23 bool SpeedOverMemory) {24 DWORD Coinit = 0;25 if (Threading == COMThreadingMode::SingleThreaded)26 Coinit |= COINIT_APARTMENTTHREADED;27 else28 Coinit |= COINIT_MULTITHREADED;29 if (SpeedOverMemory)30 Coinit |= COINIT_SPEED_OVER_MEMORY;31 ::CoInitializeEx(nullptr, Coinit);32}33 34InitializeCOMRAII::~InitializeCOMRAII() { ::CoUninitialize(); }35} // namespace sys36} // namespace llvm37