29 #ifndef JUCE_WIN32_COMSMARTPTR_H_INCLUDED 30 #define JUCE_WIN32_COMSMARTPTR_H_INCLUDED 32 #if JUCE_MINGW && defined(__uuidof) 36 #if ! (defined (_MSC_VER) || defined (__uuidof)) 38 #define __uuidof(x) UUIDGetter<x>::get() 44 unsigned int p1, p2, p3, p4, p5, p6, p7, p8, p9, p10;
51 (s,
"%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
52 &p0, &p1, &p2, &p3, &p4, &p5, &p6, &p7, &p8, &p9, &p10);
62 template <
class ComClass>
67 ComSmartPtr (ComClass*
const obj) : p (obj) {
if (p) p->AddRef(); }
71 operator ComClass*()
const throw() {
return p; }
77 if (newP != 0) newP->AddRef();
95 HRESULT hr = ::CoCreateInstance (classUUID, 0, dwClsContext,
__uuidof (ComClass), (
void**) resetAndGetPointerAddress());
96 jassert (hr != CO_E_NOTINITIALIZED);
100 template <
class OtherComClass>
109 template <
class OtherComClass>
112 return this->QueryInterface (
__uuidof (OtherComClass), destObject);
118 void release() {
if (p != 0) p->Release(); }
120 ComClass** operator&()
throw();
124 #define JUCE_COMRESULT HRESULT __stdcall 127 template <
class ComClass>
142 if (refId == IID_IUnknown)
143 return castToType <IUnknown> (result);
146 return E_NOINTERFACE;
149 template <
class Type>
152 this->AddRef(); *result = dynamic_cast <Type*> (
this);
return S_OK;
158 template <
class ComClass>
168 return this->
template castToType <ComClass> (result);
174 #endif // JUCE_WIN32_COMSMARTPTR_H_INCLUDED ComBaseClassHelperBase(unsigned int initialRefCount)
Definition: juce_win32_ComSmartPtr.h:131
ComBaseClassHelper(unsigned int initialRefCount=1)
Definition: juce_win32_ComSmartPtr.h:162
ULONG refCount
Definition: juce_win32_ComSmartPtr.h:138
#define noexcept
Definition: juce_CompilerSupport.h:141
typedef ULONG
Definition: juce_win32_Windowing.cpp:122
unsigned short uint16
Definition: juce_MathsFunctions.h:47
HRESULT QueryInterface(REFCLSID classUUID, ComSmartPtr< OtherComClass > &destObject) const
Definition: juce_win32_ComSmartPtr.h:101
ComClass & operator*() const
Definition: juce_win32_ComSmartPtr.h:72
JUCE_COMRESULT QueryInterface(REFIID refId, void **result)
Definition: juce_win32_ComSmartPtr.h:140
ComSmartPtr()
Definition: juce_win32_ComSmartPtr.h:66
ComClass ** resetAndGetPointerAddress()
Definition: juce_win32_ComSmartPtr.h:86
HRESULT QueryInterface(ComSmartPtr< OtherComClass > &destObject) const
Definition: juce_win32_ComSmartPtr.h:110
ComClass * operator->() const
Definition: juce_win32_ComSmartPtr.h:73
ComSmartPtr(ComClass *const obj)
Definition: juce_win32_ComSmartPtr.h:67
Definition: juce_VST3Common.h:137
#define JUCE_COMRESULT
Definition: juce_win32_ComSmartPtr.h:124
virtual ~ComBaseClassHelperBase()
Definition: juce_win32_ComSmartPtr.h:132
GUID uuidFromString(const char *const s) noexcept
Definition: juce_win32_ComSmartPtr.h:41
JUCE_COMRESULT QueryInterface(REFIID refId, void **result)
Definition: juce_win32_ComSmartPtr.h:165
ULONG __stdcall Release()
Definition: juce_win32_ComSmartPtr.h:135
~ComSmartPtr()
Definition: juce_win32_ComSmartPtr.h:69
JUCE_COMRESULT castToType(void **result)
Definition: juce_win32_ComSmartPtr.h:150
HRESULT CoCreateInstance(REFCLSID classUUID, DWORD dwClsContext=CLSCTX_INPROC_SERVER)
Definition: juce_win32_ComSmartPtr.h:93
ComSmartPtr(const ComSmartPtr< ComClass > &other)
Definition: juce_win32_ComSmartPtr.h:68
ULONG __stdcall AddRef()
Definition: juce_win32_ComSmartPtr.h:134
POINT SIZE POINT BLENDFUNCTION DWORD
Definition: juce_win32_Windowing.cpp:54
Definition: juce_win32_ComSmartPtr.h:128
Definition: juce_win32_ComSmartPtr.h:37
#define __uuidof(x)
Definition: juce_win32_ComSmartPtr.h:38
typedef HRESULT(WINAPI *GetDPIForMonitorFunc)(HMONITOR
~ComBaseClassHelper()
Definition: juce_win32_ComSmartPtr.h:163
unsigned char uint8
Definition: juce_MathsFunctions.h:43
Definition: juce_win32_ComSmartPtr.h:159