Go to the documentation of this file.
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();
93 HRESULT
CoCreateInstance (REFCLSID classUUID, DWORD dwClsContext = CLSCTX_INPROC_SERVER)
96 jassert (hr != CO_E_NOTINITIALIZED);
100 template <
class OtherComClass>
109 template <
class OtherComClass>
118 void release() {
if (p != 0) p->Release(); }
120 ComClass** operator&() throw();
124 #define JUCE_COMRESULT HRESULT __stdcall
127 template <
class ComClass>
134 ULONG __stdcall
AddRef() {
return ++refCount; }
135 ULONG __stdcall
Release() {
const ULONG r = --refCount;
if (r == 0)
delete this;
return r; }
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
#define JUCE_COMRESULT
Definition: juce_win32_ComSmartPtr.h:124
HRESULT QueryInterface(ComSmartPtr< OtherComClass > &destObject) const
Definition: juce_win32_ComSmartPtr.h:110
GUID uuidFromString(const char *const s) noexcept
Definition: juce_win32_ComSmartPtr.h:41
ComSmartPtr(ComClass *const obj)
Definition: juce_win32_ComSmartPtr.h:67
virtual ~ComBaseClassHelperBase()
Definition: juce_win32_ComSmartPtr.h:132
unsigned short uint16
Definition: juce_MathsFunctions.h:47
ULONG __stdcall AddRef()
Definition: juce_win32_ComSmartPtr.h:134
ComClass & operator*() const
Definition: juce_win32_ComSmartPtr.h:72
ULONG __stdcall Release()
Definition: juce_win32_ComSmartPtr.h:135
#define __uuidof(x)
Definition: juce_win32_ComSmartPtr.h:38
ComSmartPtr & operator=(const ComSmartPtr &other)
Definition: juce_VST3Common.h:150
Definition: juce_win32_ComSmartPtr.h:159
static CLSID get()
Definition: juce_win32_ComSmartPtr.h:37
JUCE_COMRESULT castToType(void **result)
Definition: juce_win32_ComSmartPtr.h:150
#define noexcept
Definition: juce_CompilerSupport.h:141
Definition: juce_win32_ComSmartPtr.h:37
JUCE_COMRESULT QueryInterface(REFIID refId, void **result)
Definition: juce_win32_ComSmartPtr.h:165
ComBaseClassHelperBase(unsigned int initialRefCount)
Definition: juce_win32_ComSmartPtr.h:131
Definition: juce_VST3Common.h:137
~ComSmartPtr()
Definition: juce_win32_ComSmartPtr.h:69
unsigned char uint8
Definition: juce_MathsFunctions.h:43
ComClass ** resetAndGetPointerAddress()
Definition: juce_win32_ComSmartPtr.h:86
HRESULT QueryInterface(REFCLSID classUUID, ComSmartPtr< OtherComClass > &destObject) const
Definition: juce_win32_ComSmartPtr.h:101
ULONG refCount
Definition: juce_win32_ComSmartPtr.h:138
JUCE_COMRESULT QueryInterface(REFIID refId, void **result)
Definition: juce_win32_ComSmartPtr.h:140
Definition: juce_win32_ComSmartPtr.h:128
~ComBaseClassHelper()
Definition: juce_win32_ComSmartPtr.h:163
ComBaseClassHelper(unsigned int initialRefCount=1)
Definition: juce_win32_ComSmartPtr.h:162
HRESULT CoCreateInstance(REFCLSID classUUID, DWORD dwClsContext=CLSCTX_INPROC_SERVER)
Definition: juce_win32_ComSmartPtr.h:93
ComClass * operator->() const
Definition: juce_win32_ComSmartPtr.h:73
ComSmartPtr(const ComSmartPtr< ComClass > &other)
Definition: juce_win32_ComSmartPtr.h:68
ComSmartPtr()
Definition: juce_win32_ComSmartPtr.h:66