⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classfactory.cpp

📁 ftpserver very good sample
💻 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 + -