Author: gadamopoulos
Date: Mon Jun 19 14:52:51 2017
New Revision: 75129
URL:
http://svn.reactos.org/svn/reactos?rev=75129&view=rev
Log:
[ATL]
-Add a new template called CComQIIDPtr and its partner I_ID macro. Its purpose is to be a
gcc compatible version of CComQIPtr.
-CComQIIDPtr<I_ID(Itype)> is the gcc compatible version of CComQIPtr<Itype>
- WARNING: this is not tested yet.
Modified:
trunk/reactos/sdk/lib/atl/atlcomcli.h
Modified: trunk/reactos/sdk/lib/atl/atlcomcli.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/atl/atlcomcli.h?re…
==============================================================================
--- trunk/reactos/sdk/lib/atl/atlcomcli.h [iso-8859-1] (original)
+++ trunk/reactos/sdk/lib/atl/atlcomcli.h [iso-8859-1] Mon Jun 19 14:52:51 2017
@@ -149,6 +149,66 @@
};
+//CComQIIDPtr<I_ID(Itype)> is the gcc compatible version of CComQIPtr<Itype>
+#define I_ID(Itype) Itype,IID_##Itype
+
+template <class T, const IID* piid>
+class CComQIIDPtr :
+ public CComPtr<T>
+{
+public:
+ CComQIIDPtr()
+ {
+ }
+ CComQIIDPtr(_Inout_opt_ T* lp) :
+ CComPtr<T>(lp)
+ {
+ }
+ CComQIIDPtr(_Inout_ const CComQIIDPtr<T,piid>& lp):
+ CComPtr<T>(lp.p)
+ {
+ }
+ CComQIIDPtr(_Inout_opt_ IUnknown* lp)
+ {
+ if (lp != NULL)
+ {
+ if (FAILED(lp->QueryInterface(*piid, (void **)&this.p)))
+ this.p = NULL;
+ }
+ }
+ T *operator = (T *lp)
+ {
+ if (this.p != NULL)
+ this.p->Release();
+ this.p = lp;
+ if (this.p != NULL)
+ this.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();
+ return *this;
+ }
+
+ T * operator=(IUnknown* lp)
+ {
+ if (this.p != NULL)
+ this.p->Release();
+
+ if (FAILED(lp->QueryInterface(*piid, (void **)&this.p)))
+ this.p = NULL;
+
+ return *this;
+ }
+};
+
+
class CComBSTR
{
public: