Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cComPtr.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cComPtr_H
6 #define _INC_cComPtr_H
7 #ifndef NO_PRAGMA_ONCE
8 #pragma once
9 #endif
10 
11 #include "cComInit.h"
13 
14 namespace GrayLib
15 {
16  template<class _TYPE = IUnknown>
17  class cComPtr : public cIUnkPtr < _TYPE >
18  {
21 
22  public:
23  typedef _TYPE TYPE_t;
24 
25 #if defined(_WIN32) && ! defined(__ATLCOMCLI_H__) && defined(_MSC_VER)
26  HRESULT CoCreateInstance(REFCLSID rclsid, IUnknown* pUnkOuter = nullptr, DWORD dwClsContext = CLSCTX_ALL)
27  {
29  ASSERT(m_p == nullptr);
30  ASSERT(cComInit::sm_nInitCalls);
31  return ::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, __uuidof(_TYPE), get_PPtrV());
32  }
33  bool IsEqualObject(IUnknown* pOther)
34  {
36  if (m_p == nullptr)
37  return(pOther == nullptr);
38  if (pOther == nullptr)
39  return(m_p == nullptr); // One is nullptr the other is not or They are both nullptr objects
40 
41  cComPtr<IUnknown> punk1;
42  punk1.SetQI(m_p, __uuidof(IUnknown));
43  cComPtr<IUnknown> punk2;
44  punk2.SetQI(pOther, __uuidof(IUnknown));
45  return punk1 == punk2;
46  }
47  template <class _TYPEQ>
48  HRESULT QueryInterface(_TYPEQ** pp) const
49  {
51  ASSERT(pp != nullptr);
52  return m_p->QueryInterface(__uuidof(_TYPEQ), (void**)pp);
53  }
54 #endif
55  };
56 };
57 
58 #endif
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cComPtr.h:18
_TYPE TYPE_t
Definition: cComPtr.h:23
Definition: cIUnkPtr.h:32
void ** get_PPtrV()
Definition: cIUnkPtr.h:135
HRESULT SetQI(IUnknown *p2, const IID &riid)
Definition: cIUnkPtr.h:161
IUnknown * m_p
Pointer to some object of TYPE.
Definition: cPtrFacade.h:28
Definition: IUnknown.h:68
Definition: cMesh.h:22