https://git.reactos.org/?p=reactos.git;a=commitdiff;h=09719d25c42a840bfb7d77...
commit 09719d25c42a840bfb7d77f3319f707cf4e04bb5 Author: Mark Jansen mark.jansen@reactos.org AuthorDate: Fri Aug 3 20:45:20 2018 +0200 Commit: Mark Jansen mark.jansen@reactos.org CommitDate: Sun Aug 5 11:54:56 2018 +0200
[ATL] Fix the CComQIIDPtr template. --- sdk/lib/atl/atlcomcli.h | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-)
diff --git a/sdk/lib/atl/atlcomcli.h b/sdk/lib/atl/atlcomcli.h index 20151dba9f..229c585fdd 100644 --- a/sdk/lib/atl/atlcomcli.h +++ b/sdk/lib/atl/atlcomcli.h @@ -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; }