1296417Sdim//==- llvm/Support/Windows/COM.inc - Windows COM Implementation -*- C++ -*-===// 2283625Sdim// 3283625Sdim// The LLVM Compiler Infrastructure 4283625Sdim// 5283625Sdim// This file is distributed under the University of Illinois Open Source 6283625Sdim// License. See LICENSE.TXT for details. 7283625Sdim// 8283625Sdim//===----------------------------------------------------------------------===// 9283625Sdim// 10283625Sdim// This file implements the Windows portion of COM support. 11283625Sdim// 12283625Sdim//===----------------------------------------------------------------------===// 13283625Sdim 14283625Sdim//===----------------------------------------------------------------------===// 15283625Sdim//=== WARNING: Implementation here must contain only Windows code. 16283625Sdim//===----------------------------------------------------------------------===// 17283625Sdim 18283625Sdim#include <objbase.h> 19283625Sdim 20283625Sdimnamespace llvm { 21283625Sdimnamespace sys { 22283625Sdim 23283625SdimInitializeCOMRAII::InitializeCOMRAII(COMThreadingMode Threading, 24283625Sdim bool SpeedOverMemory) { 25283625Sdim DWORD Coinit = 0; 26283625Sdim if (Threading == COMThreadingMode::SingleThreaded) 27283625Sdim Coinit |= COINIT_APARTMENTTHREADED; 28283625Sdim else 29283625Sdim Coinit |= COINIT_MULTITHREADED; 30283625Sdim if (SpeedOverMemory) 31283625Sdim Coinit |= COINIT_SPEED_OVER_MEMORY; 32283625Sdim ::CoInitializeEx(nullptr, Coinit); 33283625Sdim} 34283625Sdim 35283625SdimInitializeCOMRAII::~InitializeCOMRAII() { ::CoUninitialize(); } 36283625Sdim} 37283625Sdim} 38