xref: /freebsd/contrib/llvm-project/llvm/lib/Support/Windows/COM.inc (revision 5f4c09dd85bff675e0ca63c55ea3c517e0fddfcc)
1//==- llvm/Support/Windows/COM.inc - Windows COM Implementation -*- C++ -*-===//
2//
3// 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
6//
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} // namespace sys
36} // namespace llvm
37