18#include <QtCore/private/qglobal_p.h>
20#if defined(Q_OS_WIN) || defined(Q_QDOC)
22# include <QtCore/qt_windows.h>
28template <
typename... TInterfaces>
29struct QComObjectTraits
31 static constexpr bool isGuidOf(REFIID
riid)
noexcept
33 return ((
riid == __uuidof(TInterfaces)) || ...);
64template <
typename TFirstInterface,
typename... TAdditionalInterfaces>
65class QComObject :
public TFirstInterface,
public TAdditionalInterfaces...
68 STDMETHODIMP QueryInterface(REFIID
riid,
void **ppvObject)
override
73 if (
riid == __uuidof(IUnknown)) {
74 *ppvObject =
static_cast<IUnknown *
>(
static_cast<TFirstInterface *
>(
this));
80 return tryQueryInterface<TFirstInterface, TAdditionalInterfaces...>(
riid, ppvObject);
83 STDMETHODIMP_(ULONG) AddRef()
override {
return ++m_referenceCount; }
87 const LONG referenceCount = --m_referenceCount;
88 if (referenceCount == 0)
91 return referenceCount;
95 QComObject() =
default;
99 virtual ~QComObject() =
default;
102 template <
typename TInterface,
typename... TRest>
103 HRESULT tryQueryInterface(REFIID
riid,
void **ppvObject)
105 if (QtPrivate::QComObjectTraits<TInterface>::isGuidOf(
riid)) {
106 *ppvObject =
static_cast<TInterface *
>(
this);
112 if constexpr (
sizeof...(TRest) > 0)
113 return tryQueryInterface<TRest...>(
riid, ppvObject);
115 *ppvObject =
nullptr;
117 return E_NOINTERFACE;
120 std::atomic<LONG> m_referenceCount = 1;
STDMETHODIMP_(ULONG) MFDecoderSourceReader
Combined button and popup list for selecting options.
IUIViewSettingsInterop __RPC__in REFIID riid