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