[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>
#define I_ID(Itype) Itype,IID_##Itype
#define I_ID(Itype) Itype,&IID_##Itype
template <class T, const IID* piid>
class CComQIIDPtr :
class CComQIIDPtr :
public CComPtr<T>
{
public:
// Let's tell GCC how to find a symbol.
using CComPtr<T>::p;
CComQIIDPtr()
{
}
@ -172,37 +175,37 @@ public:
{
if (lp != NULL)
{
if (FAILED(lp->QueryInterface(*piid, (void **)&this.p)))
this.p = NULL;
if (FAILED(lp->QueryInterface(*piid, reinterpret_cast<void **>(&p))))
p = NULL;
}
}
T *operator = (T *lp)
{
if (this.p != NULL)
this.p->Release();
this.p = lp;
if (this.p != NULL)
this.p->AddRef();
if (p != NULL)
p->Release();
p = lp;
if (p != NULL)
p->AddRef();
return *this;
}
T *operator = (const CComQIIDPtr<T,piid> &lp)
{
if (this.p != NULL)
this.p->Release();
this.p = lp.p;
if (this.p != NULL)
this.p->AddRef();
if (p != NULL)
p->Release();
p = lp.p;
if (p != NULL)
p->AddRef();
return *this;
}
T * operator=(IUnknown* lp)
{
if (this.p != NULL)
this.p->Release();
if (p != NULL)
p->Release();
if (FAILED(lp->QueryInterface(*piid, (void **)&this.p)))
this.p = NULL;
if (FAILED(lp->QueryInterface(*piid, reinterpret_cast<void **>(&p))))
p = NULL;
return *this;
}