home *** CD-ROM | disk | FTP | other *** search
- /**************************************************************************
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
- ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
- PARTICULAR PURPOSE.
-
- Copyright 1997 Microsoft Corporation. All Rights Reserved.
- **************************************************************************/
-
- /**************************************************************************
-
- File: ClsFact.cpp
-
- Description: Implements CClassFactory.
-
- **************************************************************************/
-
- /**************************************************************************
- #include statements
- **************************************************************************/
-
- #include "ClsFact.h"
-
- /**************************************************************************
- private function prototypes
- **************************************************************************/
-
- /**************************************************************************
- global variables
- **************************************************************************/
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // IClassFactory implementation
- //
-
- /**************************************************************************
-
- CClassFactory::CClassFactory
-
- **************************************************************************/
-
- CClassFactory::CClassFactory()
- {
- m_ObjRefCount = 1;
- g_DllRefCount++;
- }
-
- /**************************************************************************
-
- CClassFactory::~CClassFactory
-
- **************************************************************************/
-
- CClassFactory::~CClassFactory()
- {
- g_DllRefCount--;
- }
-
- /**************************************************************************
-
- CClassFactory::QueryInterface
-
- **************************************************************************/
-
- STDMETHODIMP CClassFactory::QueryInterface(REFIID riid, LPVOID *ppReturn)
- {
- *ppReturn = NULL;
-
- if(IsEqualIID(riid, IID_IUnknown))
- {
- *ppReturn = this;
- }
-
- else if(IsEqualIID(riid, IID_IClassFactory))
- {
- *ppReturn = (IClassFactory*)this;
- }
-
- if(*ppReturn)
- {
- (*(LPUNKNOWN*)ppReturn)->AddRef();
- return S_OK;
- }
-
- return E_NOINTERFACE;
- }
-
- /**************************************************************************
-
- CClassFactory::AddRef
-
- **************************************************************************/
-
- STDMETHODIMP_(DWORD) CClassFactory::AddRef()
- {
- return ++m_ObjRefCount;
- }
-
-
- /**************************************************************************
-
- CClassFactory::Release
-
- **************************************************************************/
-
- STDMETHODIMP_(DWORD) CClassFactory::Release()
- {
- if(--m_ObjRefCount == 0)
- {
- delete this;
- return 0;
- }
-
- return m_ObjRefCount;
- }
-
- /**************************************************************************
-
- CClassFactory::CreateInstance
-
- **************************************************************************/
-
- STDMETHODIMP CClassFactory::CreateInstance( LPUNKNOWN pUnknown,
- REFIID riid,
- LPVOID *ppObject)
- {
- *ppObject = NULL;
-
- if(pUnknown != NULL)
- return CLASS_E_NOAGGREGATION;
-
- //add implementation specific code here
-
- CShellFolder *pShellFolder = new CShellFolder(NULL, NULL);
- if(NULL == pShellFolder)
- return E_OUTOFMEMORY;
-
- //get the QueryInterface return for our return value
- HRESULT hResult = pShellFolder->QueryInterface(riid, ppObject);
-
- //call Release to decement the ref count
- pShellFolder->Release();
-
- //return the result from QueryInterface
- return hResult;
- }
-
- /**************************************************************************
-
- CClassFactory::LockServer
-
- **************************************************************************/
-
- STDMETHODIMP CClassFactory::LockServer(BOOL)
- {
- return E_NOTIMPL;
- }
-
-