18#if defined(Q_OS_WIN) || defined(Q_QDOC)
21#include <QtCore/private/qglobal_p.h>
22#include <QtCore/qt_windows.h>
23#include <QtCore/private/qbstr_p.h>
24#include <QtCore/private/qcomptr_p.h>
32 QComVariant()
noexcept
34 VariantInit(&m_variant);
37 ~QComVariant()
noexcept
42 explicit QComVariant(
bool value)
noexcept
44 m_variant.vt = VT_BOOL;
45 m_variant.boolVal = value ? VARIANT_TRUE : VARIANT_FALSE;
48 explicit QComVariant(
int value)
noexcept
50 m_variant.vt = VT_INT;
51 m_variant.intVal = value;
54 explicit QComVariant(
long value)
noexcept
57 m_variant.lVal = value;
60 explicit QComVariant(
double value)
noexcept
63 m_variant.dblVal = value;
67 QComVariant(
const ComPtr<T> &value)
noexcept
69 static_assert(std::is_base_of_v<IUnknown, T>,
"Invalid COM interface");
70 ComPtr<IUnknown> unknown = value;
71 m_variant.vt = VT_UNKNOWN;
72 m_variant.punkVal = unknown.Detach();
75 QComVariant(QBStr &&value)
noexcept
77 m_variant.vt = VT_BSTR;
78 m_variant.bstrVal = value.release();
81 QComVariant(
const QString &str)
83 m_variant.vt = VT_BSTR;
84 m_variant.bstrVal = QBStr{ str }.release();
87 const VARIANT &get()
const noexcept
92 VARIANT &get()
noexcept
98 [[nodiscard]] VARIANT *operator&()
noexcept
104 VARIANT release()
noexcept
106 const VARIANT detached{ m_variant };
107 VariantInit(&m_variant);
111 QComVariant(
const QComVariant &) =
delete;
112 QComVariant &operator=(
const QComVariant &) =
delete;
113 QComVariant(QComVariant && other) =
delete;
114 QComVariant &operator=(QComVariant &&) =
delete;
120 const HRESULT hr = VariantClear(&m_variant);
121 Q_ASSERT(hr == S_OK);
124 VariantInit(&m_variant);