[ATL] Fix the CComQIIDPtr template.

This commit is contained in:
Mark Jansen 2018-08-03 20:45:20 +02:00
parent eb324b6a9c
commit 09719d25c4
No known key found for this signature in database
GPG key ID: B39240EE84BEAE8B

View file

@ -150,13 +150,16 @@ public:
//CComQIIDPtr<I_ID(Itype)> is the gcc compatible version of CComQIPtr<Itype> //CComQIIDPtr<I_ID(Itype)> is the gcc compatible version of CComQIPtr<Itype>
#define I_ID(Itype) Itype,IID_##Itype #define I_ID(Itype) Itype,&IID_##Itype
template <class T, const IID* piid> template <class T, const IID* piid>
class CComQIIDPtr : class CComQIIDPtr :
public CComPtr<T> public CComPtr<T>
{ {
public: public:
// Let's tell GCC how to find a symbol.
using CComPtr<T>::p;
CComQIIDPtr() CComQIIDPtr()
{ {
} }
@ -172,37 +175,37 @@ public:
{ {
if (lp != NULL) if (lp != NULL)
{ {
if (FAILED(lp->QueryInterface(*piid, (void **)&this.p))) if (FAILED(lp->QueryInterface(*piid, reinterpret_cast<void **>(&p))))
this.p = NULL; p = NULL;
} }
} }
T *operator = (T *lp) T *operator = (T *lp)
{ {
if (this.p != NULL) if (p != NULL)
this.p->Release(); p->Release();
this.p = lp; p = lp;
if (this.p != NULL) if (p != NULL)
this.p->AddRef(); p->AddRef();
return *this; return *this;
} }
T *operator = (const CComQIIDPtr<T,piid> &lp) T *operator = (const CComQIIDPtr<T,piid> &lp)
{ {
if (this.p != NULL) if (p != NULL)
this.p->Release(); p->Release();
this.p = lp.p; p = lp.p;
if (this.p != NULL) if (p != NULL)
this.p->AddRef(); p->AddRef();
return *this; return *this;
} }
T * operator=(IUnknown* lp) T * operator=(IUnknown* lp)
{ {
if (this.p != NULL) if (p != NULL)
this.p->Release(); p->Release();
if (FAILED(lp->QueryInterface(*piid, (void **)&this.p))) if (FAILED(lp->QueryInterface(*piid, reinterpret_cast<void **>(&p))))
this.p = NULL; p = NULL;
return *this; return *this;
} }