https://git.reactos.org/?p=reactos.git;a=commitdiff;h=09719d25c42a840bfb7d7…
commit 09719d25c42a840bfb7d77f3319f707cf4e04bb5
Author:     Mark Jansen <mark.jansen(a)reactos.org>
AuthorDate: Fri Aug 3 20:45:20 2018 +0200
Commit:     Mark Jansen <mark.jansen(a)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;
     }