CShellExtClassFactory::CShellExtClassFactory() { instanceCount = 0; referenceCount++; } CShellExtClassFactory::~CShellExtClassFactory() { referenceCount--; } STDMETHODIMP CShellExtClassFactory::QueryInterface(REFIID riid, LPVOID *ppv) { *ppv = NULL; if(IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory)) { *ppv = (LPCLASSFACTORY)this; AddRef(); return NOERROR; } return E_NOINTERFACE; } STDMETHODIMP_(ULONG) CShellExtClassFactory::AddRef() { return ++instanceCount; } STDMETHODIMP_(ULONG) CShellExtClassFactory::Release() { if(--instanceCount) return instanceCount; delete this; return 0; } STDMETHODIMP CShellExtClassFactory::CreateInstance(LPUNKNOWN pUnknownOuter, REFIID riid, LPVOID *ppv) { *ppv = NULL; if(pUnknownOuter) return CLASS_E_NOAGGREGATION; CShellExt *pShellExt = new CShellExt(); if(pShellExt == NULL) return E_OUTOFMEMORY; return pShellExt->QueryInterface(riid, ppv); } STDMETHODIMP CShellExtClassFactory::LockServer(BOOL fLock) { return NOERROR; }