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

📄 iclassf2.cpp

📁 英文版的 想要的话可以下载了 为大家服务
💻 CPP
字号:
/*
 * ICLASSF2.CPP
 *
 * Template implementation of a Class Factory object that
 * supports licensing.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "iclassf2.h"


/*
 * CClassFactory2::CClassFactory2
 * CClassFactory2::~CClassFactory2
 *
 * Constructor Parameters:
 *  None
 */

CClassFactory2::CClassFactory2(void)
    {
    m_cRef=0L;
    return;
    }


CClassFactory2::~CClassFactory2(void)
    {
    return;
    }





/*
 * CClassFactory2::QueryInterface
 * CClassFactory2::AddRef
 * CClassFactory2::Release
 *
 * Purpose:
 *  Non-delegating IUnknown members for CClassFactory2.
 */

STDMETHODIMP CClassFactory2::QueryInterface(REFIID riid
    , LPVOID *ppv)
    {
    *ppv=NULL;

    if (IID_IUnknown==riid || IID_IClassFactory2==riid
        || IID_IClassFactory2==riid)
        *ppv=(LPVOID)this;

    if (NULL!=*ppv)
        {
        ((LPUNKNOWN)*ppv)->AddRef();
        return NOERROR;
        }

    return ResultFromScode(E_NOINTERFACE);
    }


STDMETHODIMP_(ULONG) CClassFactory2::AddRef(void)
    {
    return ++m_cRef;
    }


STDMETHODIMP_(ULONG) CClassFactory2::Release(void)
    {
    if (0L!=--m_cRef)
        return m_cRef;

    //Free the object if the reference and lock counts are zero.
    delete this;
    return 0;
    }







/*
 * CClassFactory2::CreateInstance
 *
 * Purpose:
 *  Instantiates an object supported by this class factory.  That
 *  object must at least support IUnknown.
 *
 *  Derived classes should override this function.
 *
 * Parameters:
 *  pUnkOuter       LPUNKNOWN to the controlling IUnknown if we are
 *                  being used in an aggregation.
 *  riid            REFIID identifying the interface the caller
 *                  desires to have for the new object.
 *  ppvObj          LPVOID * in which to store the desired
 *                  interface pointer for the new object.
 *
 * Return Value:
 *  HRESULT         NOERROR if successful, otherwise E_NOINTERFACE
 *                  if we cannot support the requested interface.
 */

STDMETHODIMP CClassFactory2::CreateInstance(LPUNKNOWN pUnkOuter
    , REFIID riid, LPVOID *ppvObj)
    {
    *ppvObj=NULL;
    return ResultFromScode(E_OUTOFMEMORY);
    }






/*
 * CClassFactory2::LockServer
 *
 * Purpose:
 *  Increments or decrements the lock count of the serving
 *  IClassFactory2 object.  When the lock count is zero and the
 *  reference count is zero we get rid of this object.
 *
 *  DLL objects should override this to affect their DLL ref count.
 *
 * Parameters:
 *  fLock           BOOL specifying whether to increment or
 *                  decrement the lock count.
 */

STDMETHODIMP CClassFactory2::LockServer(BOOL fLock)
    {
    return NOERROR;
    }



/*
 * CClassFactory2::GetLicInfo
 *
 * Purpose:
 *  Fills a LICINFO structure with license information for
 *  this class factory.
 *
 * Parameters:
 *  pLicInfo        LPLICINFO to the structure to fill
 */

STDMETHODIMP CClassFactory2::GetLicInfo(LPLICINFO pLicInfo)
    {
    if (NULL==pLicInfo)
        return ResultFromScode(E_POINTER);

    return ResultFromScode(E_NOTIMPL);
    }




/*
 * CClassFactory2::RequestLicKey
 *
 * Purpose:
 *  Retrieves a license key from this class factory for use with
 *  CreateInstanceLic.
 *
 * Parameters:
 *  dwReserved      DWORD reserved
 *  pbstrKey        BSTR * in which to return the key.
 */

STDMETHODIMP CClassFactory2::RequestLicKey(DWORD dwReserved
    , BSTR *pbstrKey)
    {
    *pbstrKey=NULL;
    return ResultFromScode(E_NOTIMPL);
    }



/*
 * CClassFactory2::CreateInstanceLic
 *
 * Purpose:
 *  Creates and instance of the object given a license key.
 *  Same as CreateInstance, and implementations of this function
 *  will typically just validate the key and call CreateInstance.
 *
 * Parameters:
 *  pUnkOuter       LPUNKNOWN to the controlling IUnknown if we are
 *                  being used in an aggregation.
 *  pUnkReserved    LPUNKNOWN reserved.
 *  riid            REFIID identifying the interface the caller
 *                  desires to have for the new object.
 *  bstrKey         BSTR key used to validate creation.
 *  ppvObj          LPVOID * in which to store the desired
 *                  interface pointer for the new object.
 */

STDMETHODIMP CClassFactory2::CreateInstanceLic(LPUNKNOWN pUnkOuter
    , LPUNKNOWN pUnkReserved, REFIID riid, BSTR bstrKey
    , LPVOID *ppvObj)
    {
    *ppvObj=NULL;

    //Validate bstrKey

    //Create an instance once the key is validated.
    return CreateInstance(pUnkOuter, riid, ppvObj);
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -