COM.inc revision 283625
1224133Sdim//===- llvm/Support/Windows/COM.inc - Windows COM Implementation *- C++ -*-===// 2224133Sdim// 3224133Sdim// The LLVM Compiler Infrastructure 4224133Sdim// 5224133Sdim// This file is distributed under the University of Illinois Open Source 6224133Sdim// License. See LICENSE.TXT for details. 7224133Sdim// 8224133Sdim//===----------------------------------------------------------------------===// 9224133Sdim// 10224133Sdim// This file implements the Windows portion of COM support. 11224133Sdim// 12224133Sdim//===----------------------------------------------------------------------===// 13224133Sdim 14224133Sdim//===----------------------------------------------------------------------===// 15224133Sdim//=== WARNING: Implementation here must contain only Windows code. 16224133Sdim//===----------------------------------------------------------------------===// 17224133Sdim 18226633Sdim#include <objbase.h> 19226633Sdim 20226633Sdimnamespace llvm { 21226633Sdimnamespace sys { 22224133Sdim 23224133SdimInitializeCOMRAII::InitializeCOMRAII(COMThreadingMode Threading, 24224133Sdim bool SpeedOverMemory) { 25224133Sdim DWORD Coinit = 0; 26224133Sdim if (Threading == COMThreadingMode::SingleThreaded) 27224133Sdim Coinit |= COINIT_APARTMENTTHREADED; 28224133Sdim else 29226633Sdim Coinit |= COINIT_MULTITHREADED; 30226633Sdim if (SpeedOverMemory) 31226633Sdim Coinit |= COINIT_SPEED_OVER_MEMORY; 32226633Sdim ::CoInitializeEx(nullptr, Coinit); 33226633Sdim} 34226633Sdim 35224133SdimInitializeCOMRAII::~InitializeCOMRAII() { ::CoUninitialize(); } 36224133Sdim} 37224133Sdim} 38224133Sdim