25#if defined(_WIN32) && !defined(SWIG)
31#if defined(_WIN32) && !defined(SWIG)
35class CoInitializeGuard
38 explicit CoInitializeGuard(COINIT initFlags) : hr_(CoInitializeEx(nullptr, initFlags)) {}
39 ~CoInitializeGuard() {
if (SUCCEEDED(hr_)) CoUninitialize(); }
40 CoInitializeGuard(
const CoInitializeGuard&) =
delete;
41 CoInitializeGuard& operator=(
const CoInitializeGuard&) =
delete;
48AST_UTIL_API HRESULT aEnsureCoInitialized();
59 ComScopedPtr() =
default;
60 ComScopedPtr(
const ComScopedPtr&) =
delete;
61 ComScopedPtr& operator=(
const ComScopedPtr&) =
delete;
62 ComScopedPtr(ComScopedPtr&& other) noexcept : p_(other.p_) { other.p_ =
nullptr; }
63 ComScopedPtr& operator=(ComScopedPtr&& other)
noexcept{std::swap(p_, other.p_);
return *
this;}
64 ~ComScopedPtr() { reset(); }
67 T* get()
const {
return p_; }
68 T* operator->()
const {
return p_; }
69 T& operator*()
const {
return *p_; }
73 T** operator&() {
return &p_; }
76 void reset() {
if (p_) p_->Release(); p_ =
nullptr; }
78 operator bool()
const {
return p_ !=
nullptr; }
93A_ALWAYS_INLINE
int aEnsureCoInitialized() {
return 0; }