Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // -----------------CoCarClassFactory.h
- #ifndef _COCARCLASSFACTORY_H
- #define _COCARCLASSFACTORY_H
- #include <Windows.h>
- class CoCarClassFactory :
- public IClassFactory
- {
- public:
- CoCarClassFactory();
- virtual ~CoCarClassFactory();
- // IUnknown
- STDMETHODIMP QueryInterface(REFIID riid, void** ppv);
- STDMETHODIMP_(ULONG) AddRef();
- STDMETHODIMP_(ULONG) Release();
- // IClassFactory
- STDMETHODIMP LockServer(bool fLock);
- STDMETHODIMP CreateInstance(LPUNKNOWN pUnkOuter,
- REFIID riid, void** ppv);
- private:
- ULONG m_refCount;
- };
- #endif
- // ------------------CoCarClassFactory.cpp
- #include "CoCarClassFactory.h"
- #include "CoCar.h"
- extern ULONG g_LockCount;
- extern ULONG g_objCount;
- // Constructor
- CoCarClassFactory::CoCarClassFactory()
- {
- m_refCount = 0;
- g_objCount++;
- }
- // Destructor
- CoCarClassFactory::~CoCarClassFactory()
- {
- g_objCount--;
- }
- // The class factory's IUnknown implementation.
- STDMETHODIMP_(ULONG) CoCarClassFactory::AddRef()
- {
- return ++m_refCount;
- }
- STDMETHODIMP_(ULONG) CoCarClassFactory::Release()
- {
- if (--m_refCount == 0)
- {
- delete this;
- return 0;
- }
- return m_refCount;
- }
- STDMETHODIMP CoCarClassFactory::QueryInterface(REFIID riid, void** ppv)
- {
- // Which aspect of me do they want?
- if (riid == IID_IUnknown)
- {
- *ppv = (IUnknown*)this;
- }
- else if (riid == IID_IClassFactory)
- {
- *ppv = (IClassFactory*)this;
- }
- else
- {
- *ppv = NULL;
- return E_NOINTERFACE;
- }
- ((IUnknown*)(*ppv))->AddRef();
- return S_OK;
- }
- // The class factory's IClassFactory implementation
- STDMETHODIMP CoCarClassFactory::CreateInstance(LPUNKNOWN pUnkOuter,
- REFIID riid, void** ppv)
- {
- if (pUnkOuter != NULL)
- return CLASS_E_NOAGGREGATION;
- CoCar* pCarObj = NULL;
- HRESULT hr;
- pCarObj = new CoCar;
- hr = pCarObj->QueryInterface(riid, ppv);
- if (FAILED(hr))
- delete pCarObj;
- return hr;
- }
- STDMETHODIMP CoCarClassFactory::LockServer(bool fLock)
- {
- if (fLock)
- ++g_LockCount;
- else
- --g_LockCount;
- return S_OK;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement