1 //==- llvm/Support/Windows/COM.inc - Windows COM Implementation -*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements the Windows portion of COM support. 11 // 12 //===----------------------------------------------------------------------===// 13 14 //===----------------------------------------------------------------------===// 15 //=== WARNING: Implementation here must contain only Windows code. 16 //===----------------------------------------------------------------------===// 17 18 #include <objbase.h> 19 20 namespace llvm { 21 namespace sys { 22 23 InitializeCOMRAII::InitializeCOMRAII(COMThreadingMode Threading, 24 bool SpeedOverMemory) { 25 DWORD Coinit = 0; 26 if (Threading == COMThreadingMode::SingleThreaded) 27 Coinit |= COINIT_APARTMENTTHREADED; 28 else 29 Coinit |= COINIT_MULTITHREADED; 30 if (SpeedOverMemory) 31 Coinit |= COINIT_SPEED_OVER_MEMORY; 32 ::CoInitializeEx(nullptr, Coinit); 33 } 34 35 InitializeCOMRAII::~InitializeCOMRAII() { ::CoUninitialize(); } 36 } 37 } 38