| //==- llvm/Support/Windows/COM.inc - Windows COM Implementation -*- C++ -*-===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This file implements the Windows portion of COM support. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| //===----------------------------------------------------------------------===// | |
| //=== WARNING: Implementation here must contain only Windows code. | |
| //===----------------------------------------------------------------------===// | |
| #include <objbase.h> | |
| namespace llvm { | |
| namespace sys { | |
| InitializeCOMRAII::InitializeCOMRAII(COMThreadingMode Threading, | |
| bool SpeedOverMemory) { | |
| DWORD Coinit = 0; | |
| if (Threading == COMThreadingMode::SingleThreaded) | |
| Coinit |= COINIT_APARTMENTTHREADED; | |
| else | |
| Coinit |= COINIT_MULTITHREADED; | |
| if (SpeedOverMemory) | |
| Coinit |= COINIT_SPEED_OVER_MEMORY; | |
| ::CoInitializeEx(nullptr, Coinit); | |
| } | |
| InitializeCOMRAII::~InitializeCOMRAII() { ::CoUninitialize(); } | |
| } // namespace sys | |
| } // namespace llvm |