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-exception 6// 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 else 28 Coinit |= COINIT_MULTITHREADED; 29 if (SpeedOverMemory) 30 Coinit |= COINIT_SPEED_OVER_MEMORY; 31 ::CoInitializeEx(nullptr, Coinit); 32} 33 34InitializeCOMRAII::~InitializeCOMRAII() { ::CoUninitialize(); } 35} 36} 37