diff --git a/sdk/lib/atl/atlcomcli.h b/sdk/lib/atl/atlcomcli.h index a11b05ace36..e7c5fd32ca4 100644 --- a/sdk/lib/atl/atlcomcli.h +++ b/sdk/lib/atl/atlcomcli.h @@ -98,6 +98,19 @@ public: p->Release(); } + HRESULT CoCreateInstance(REFCLSID rclsid, REFIID riid, LPUNKNOWN pOuter = NULL, DWORD ClsCtx = CLSCTX_ALL) + { + ATLASSERT(!p); + return ::CoCreateInstance(rclsid, pOuter, ClsCtx, riid, (void**)&p); + } + + HRESULT CoCreateInstance(LPCOLESTR ProgID, REFIID riid, LPUNKNOWN pOuter = NULL, DWORD ClsCtx = CLSCTX_ALL) + { + CLSID clsid; + HRESULT hr = CLSIDFromProgID(ProgID, &clsid); + return FAILED(hr) ? hr : CoCreateInstance(clsid, riid, pOuter, ClsCtx); + } + T *operator = (T *lp) { T* pOld = p; @@ -142,6 +155,16 @@ public: return *this; } + + HRESULT CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pOuter = NULL, DWORD ClsCtx = CLSCTX_ALL) + { + return CoCreateInstance(rclsid, __uuidof(T), pOuter, ClsCtx); + } + + HRESULT CoCreateInstance(LPCOLESTR ProgID, LPUNKNOWN pOuter = NULL, DWORD ClsCtx = CLSCTX_ALL) + { + return CoCreateInstance(ProgID, __uuidof(T), pOuter, ClsCtx); + } #endif void Release()