STDMETHODIMP CShellExtClassFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj) { if(ppvObj == 0) return E_POINTER; *ppvObj = NULL; // Shell extensions typically don't support aggregation (inheritance) if (pUnkOuter) return CLASS_E_NOAGGREGATION; // Create the main shell extension object. The shell will then call // QueryInterface with IID_IShellExtInit--this is how shell extensions are // initialized. CShellExt* pShellExt = new (std::nothrow) CShellExt(m_StateToMake); //Create the CShellExt object if (NULL == pShellExt) return E_OUTOFMEMORY; const HRESULT hr = pShellExt->QueryInterface(riid, ppvObj); if(FAILED(hr)) delete pShellExt; return hr; }
// *** IClassFactory methods *** STDMETHODIMP CShellExtClassFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj) { *ppvObj = NULL; if (pUnkOuter) return CLASS_E_NOAGGREGATION; CShellExt * pShellExt = new CShellExt(); if (!pShellExt) return E_OUTOFMEMORY; return pShellExt->QueryInterface(riid, ppvObj); }
STDMETHODIMP CShellExtClassFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj) { *ppvObj = NULL; // Shell extensions typically don't support aggregation (inheritance) if (pUnkOuter) return CLASS_E_NOAGGREGATION; // Create the main shell extension object. The shell will then call // QueryInterface with IID_IShellExtInit--this is how shell extensions are // initialized. CShellExt* pShellExt = new CShellExt(); //Create the CShellExt object if (NULL == pShellExt) return E_OUTOFMEMORY; return pShellExt->QueryInterface(riid, ppvObj); }