blob: 002182bc3939422e8921c9bfa58387a04bdaddb7 [file] [log] [blame]
NAKAMURA Takumi5a430552015-08-05 06:11:08 +00001//==- llvm/Support/Windows/COM.inc - Windows COM Implementation -*- C++ -*-===//
Zachary Turnerc2055702015-04-27 17:19:26 +00002//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Zachary Turnerc2055702015-04-27 17:19:26 +00006//
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}