19#if defined(Q_OS_WIN) || defined(Q_QDOC)
22#include <QtCore/private/qglobal_p.h>
23#include <QtCore/qt_windows.h>
24#include <QtCore/private/qbstr_p.h>
25#include <QtCore/private/qcomptr_p.h>
33 QComVariant()
noexcept
35 VariantInit(&m_variant);
38 ~QComVariant()
noexcept
43 explicit QComVariant(
bool value)
noexcept
45 m_variant.vt = VT_BOOL;
46 m_variant.boolVal = value ? VARIANT_TRUE : VARIANT_FALSE;
49 explicit QComVariant(
int value)
noexcept
51 m_variant.vt = VT_INT;
52 m_variant.intVal = value;
55 explicit QComVariant(
long value)
noexcept
58 m_variant.lVal = value;
61 explicit QComVariant(
double value)
noexcept
64 m_variant.dblVal = value;
68 QComVariant(
const ComPtr<T> &value)
noexcept
70 static_assert(std::is_base_of_v<IUnknown, T>,
"Invalid COM interface");
71 ComPtr<IUnknown> unknown = value;
72 m_variant.vt = VT_UNKNOWN;
73 m_variant.punkVal = unknown.Detach();
76 QComVariant(QBStr &&value)
noexcept
78 m_variant.vt = VT_BSTR;
79 m_variant.bstrVal = value.release();
82 QComVariant(
const QString &str)
84 m_variant.vt = VT_BSTR;
85 m_variant.bstrVal = QBStr{ str }.release();
88 const VARIANT &get()
const noexcept
93 VARIANT &get()
noexcept
99 [[nodiscard]] VARIANT *operator&()
noexcept
105 VARIANT release()
noexcept
107 const VARIANT detached{ m_variant };
108 VariantInit(&m_variant);
112 QComVariant(
const QComVariant &) =
delete;
113 QComVariant &operator=(
const QComVariant &) =
delete;
114 QComVariant(QComVariant && other) =
delete;
115 QComVariant &operator=(QComVariant &&) =
delete;
121 const HRESULT hr = VariantClear(&m_variant);
122 Q_ASSERT(hr == S_OK);
125 VariantInit(&m_variant);