📄 classfactory.cpp
字号:
#include "StdAfx.h"#include "WarMmcSnapin.h"#include "ClassFactory.h" // class implemented#include "ComponentData.h"#include "SnapinAbout.h"/////////////////////////////// PUBLIC /////////////////////////////////////////============================= LIFECYCLE ====================================CClassFactory::CClassFactory(FACTORY_TYPE factoryType): m_cref(0), m_factoryType(factoryType){ OBJECT_CREATED}CClassFactory::~CClassFactory(){ OBJECT_DESTROYED}//============================= OPERATORS ====================================//============================= OPERATIONS ===================================STDMETHODIMP CClassFactory::QueryInterface(REFIID riid, LPVOID *ppv){ if (!ppv) return E_FAIL; *ppv = NULL; if (IsEqualIID(riid, IID_IUnknown)) *ppv = static_cast<IClassFactory *>(this); else if (IsEqualIID(riid, IID_IClassFactory)) *ppv = static_cast<IClassFactory *>(this); if (*ppv) { reinterpret_cast<IUnknown *>(*ppv)->AddRef(); return S_OK; } return E_NOINTERFACE;}STDMETHODIMP_(ULONG) CClassFactory::AddRef(){ return InterlockedIncrement((LONG *)&m_cref);}STDMETHODIMP_(ULONG) CClassFactory::Release(){ if (InterlockedDecrement((LONG *)&m_cref) == 0) { delete this; return 0; } return m_cref;}STDMETHODIMP CClassFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID * ppvObj){ HRESULT hr; void* pObj; if (!ppvObj) return E_FAIL; *ppvObj = NULL; // Our object does does not support aggregation, so we need to // fail if they ask us to do aggregation. if (pUnkOuter) return CLASS_E_NOAGGREGATION; if (COMPONENT == m_factoryType) { pObj = new CComponentData(); } else { pObj = new CSnapinAbout(); } if (!pObj) return E_OUTOFMEMORY; // QueryInterface will do the AddRef() for us, so we do not // do it in this function hr = ((LPUNKNOWN)pObj)->QueryInterface(riid, ppvObj); if (FAILED(hr)) delete pObj; return hr;}STDMETHODIMP CClassFactory::LockServer(BOOL fLock){ if (fLock) InterlockedIncrement((LONG *)&g_uSrvLock); else InterlockedDecrement((LONG *)&g_uSrvLock); return S_OK;}//============================= ACCESS ===================================//============================= INQUIRY ===================================/////////////////////////////// PROTECTED ////////////////////////////////////////////////////////////////// PRIVATE ///////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -