亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? autobase.cpp

?? 英文版的 想要的話可以下載了 為大家服務
?? CPP
字號:
/*
 * AUTOBASE.CPP
 * Cosmo Chapter 14
 *
 * Base object for Cosmo's OLE Automation support.  This class
 * provides the implementation of IDispatch as well as the code
 * that loads the appropriate type information.  This leaves
 * each specific object to implement it's specific interface and
 * little else.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Right Reserved.
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  INTERNET>kraigb@microsoft.com
 */


#include "cosmo.h"


/*
 * CAutoBase::CAutoBase
 * CAutoBase::~CAutoBase
 *
 * Constructor Parameters:
 *  pv              void * to the frame or document object that
 *                  derived classes will use to access the functions
 *                  they need to implemenet their interface.
 *  hInst           HINSTANCE of the application (for loading
 *                  resources)
 *  riid            REFIID of the interface that this object
 *                  should expose.
 *  rdiid           REFIID of the dispinterface that this
 *                  object should expose.
 *  pfnDestroy      PFNDESTROYED to call when the object
 *                  is destroyed.
 */

CAutoBase::CAutoBase(void *pv, HINSTANCE hInst, REFIID riid
    , REFIID rdiid, PFNDESTROYED pfnDestroy)
    {
    m_cRef=0L;
    m_pfnDestroy=pfnDestroy;

    m_pObj=pv;
    m_hInst=hInst;

    m_iid=riid;
    m_diid=rdiid;

    m_pImpIDispatch=NULL;
    m_pImpIExtConn=NULL;
    return;
    }


CAutoBase::~CAutoBase(void)
    {
    DeleteInterfaceImp(m_pImpIExtConn);
    DeleteInterfaceImp(m_pImpIDispatch);
    return;
    }


/*
 * CAutoBase::Init
 *
 * Purpose:
 *  Performs any intiailization of CAutoBase that's prone to failure
 *  that we also use internally before exposing the object outside.
 *
 * Parameters:
 *  fExtConn        BOOL indicating if we care about external
 *                  connections for shutdown.
 *
 * Return Value:
 *  BOOL            TRUE if the function is successful,
 *                  FALSE otherwise.
 */

BOOL CAutoBase::Init(BOOL fExtConn)
    {
    //The derived class has to supply the IUnknown implementation
    m_pImpIDispatch=new CImpIDispatch(this
        , (IUnknown *)VTableInterface());

    if (NULL==m_pImpIDispatch)
        return FALSE;

    if (fExtConn)
        {
        m_pImpIExtConn=new CImpIExtConn
            ((IUnknown *)VTableInterface());

        if (NULL==m_pImpIExtConn)
            return FALSE;
        }

    return TRUE;
    }



//IDispatch interface implementation

/*
 * CImpIDispatch::CImpIDispatch
 * CImpIDispatch::~CImpIDispatch
 *
 * Parameters (Constructor):
 *  pObj            PCAutoBase to the containing object.
 *  pUnkOuter       LPUNKNOWN to which we delegate.
 */

CImpIDispatch::CImpIDispatch(PCAutoBase pObj, LPUNKNOWN pUnkOuter)
    {
    m_cRef=0;
    m_pObj=pObj;
    m_pUnkOuter=pUnkOuter;
    m_pITypeInfo=NULL;
    return;
    }

CImpIDispatch::~CImpIDispatch(void)
    {
    ReleaseInterface(m_pITypeInfo);
    return;
    }



/*
 * CImpIDispatch::QueryInterface
 * CImpIDispatch::AddRef
 * CImpIDispatch::Release
 *
 * Purpose:
 *  IUnknown members for CImpIDispatch object.
 */

STDMETHODIMP CImpIDispatch::QueryInterface(REFIID riid, PPVOID ppv)
    {
    return m_pUnkOuter->QueryInterface(riid, ppv);
    }


STDMETHODIMP_(ULONG) CImpIDispatch::AddRef(void)
    {
    ++m_cRef;
    return m_pUnkOuter->AddRef();
    }

STDMETHODIMP_(ULONG) CImpIDispatch::Release(void)
    {
    --m_cRef;
    return m_pUnkOuter->Release();
    }



/*
 * CImpIDispatch::GetTypeInfoCount
 * CImpIDispatch::GetTypeInfo
 */

STDMETHODIMP CImpIDispatch::GetTypeInfoCount(UINT *pctInfo)
    {
    //We implement GetTypeInfo so return 1
    *pctInfo=1;
    return NOERROR;
    }

STDMETHODIMP CImpIDispatch::GetTypeInfo(UINT itInfo, LCID lcid
    , ITypeInfo **ppITypeInfo)
    {
    HRESULT     hr;
    ITypeLib   *pITypeLib;
    ITypeInfo **ppITI=NULL;

    if (0!=itInfo)
        return ResultFromScode(TYPE_E_ELEMENTNOTFOUND);

    if (NULL==ppITypeInfo)
        return ResultFromScode(E_POINTER);

    *ppITypeInfo=NULL;

    /*
     * This switch statement is nicely extensible for other
     * languages and other m_pITypeInfo variables (such as it
     * was used in Beeper #2 (see ..\beeper2\beeper.cpp)
     */
    switch (PRIMARYLANGID(lcid))
        {
        case LANG_NEUTRAL:
        case LANG_ENGLISH:
            ppITI=&m_pITypeInfo;
            break;

        default:
            return ResultFromScode(DISP_E_UNKNOWNLCID);
        }

    //Load a type lib if we don't have the information already.
    if (NULL==*ppITI)
        {
        hr=LoadRegTypeLib(LIBID_CosmoTypeLibrary, 1, 0
            , PRIMARYLANGID(lcid), &pITypeLib);

        /*
         * If LoadRegTypeLib fails, try loading directly from
         * our module with LoadTypeLib.
         */
        if (FAILED(hr))
            {
            const int   cch=512;
            TCHAR       szModule[cch];

            GetModuleFileName(m_pObj->m_hInst, szModule, cch);

            switch (PRIMARYLANGID(lcid))
                {
                case LANG_NEUTRAL:
                case LANG_ENGLISH:
                   #ifdef WIN32ANSI
                    OLECHAR szTemp[512];
                    MultiByteToWideChar(CP_ACP, 0, szModule, -1, szTemp, 512);
                    hr=LoadTypeLib(szTemp, &pITypeLib);
                   #else
                    hr=LoadTypeLib(szModule, &pITypeLib);
                   #endif
                    break;

                /*
                 * Easily extensible with additional languages.
                 * Use LoadTypeLibFromResource or specify
                 * separate .TLB files instead of the module name.
                 * Be sure to use your DIR registry key to find
                 * the right path.
                 */
                }
            }

        if (FAILED(hr))
            return hr;

        //Got the type lib, get type info for the interface we want
        hr=pITypeLib->GetTypeInfoOfGuid(m_pObj->m_iid, ppITI);
        pITypeLib->Release();

        if (FAILED(hr))
            return hr;
        }

    //Ref on ITypeInfo holds type library in memory
    (*ppITI)->AddRef();
    *ppITypeInfo=*ppITI;
    return NOERROR;
    }



/*
 * CImpIDispatch::GetIDsOfNames
 * CImpIDispatch::Invoke
 */

STDMETHODIMP CImpIDispatch::GetIDsOfNames(REFIID riid
    , OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID *rgDispID)
    {
    HRESULT     hr;
    ITypeInfo  *pTI;

    if (IID_NULL!=riid)
        return ResultFromScode(DISP_E_UNKNOWNINTERFACE);

    hr=GetTypeInfo(0, lcid, &pTI);

    if (SUCCEEDED(hr))
        {
        hr=DispGetIDsOfNames(pTI, rgszNames, cNames, rgDispID);
        pTI->Release();
        }

    return hr;
    }

STDMETHODIMP CImpIDispatch::Invoke(DISPID dispID, REFIID riid
    , LCID lcid, unsigned short wFlags, DISPPARAMS *pDispParams
    , VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
    {
    HRESULT     hr;
    ITypeInfo  *pTI;

    if (IID_NULL!=riid)
        return ResultFromScode(DISP_E_UNKNOWNINTERFACE);

    //Get the ITypeInfo for lcid
    hr=GetTypeInfo(0, lcid, &pTI);

    if (FAILED(hr))
        return hr;

    //Note:  this sample doesn't do anything with exceptions.

    //The VTableInterface function gets us the right pointer
    hr=pTI->Invoke(m_pObj->VTableInterface(), dispID, wFlags
        , pDispParams, pVarResult, pExcepInfo, puArgErr);

    pTI->Release();
    return hr;
    }




//IExternalConnection implementation

/*
 * CImpIExtConn::CImpIExtConn
 * CImpIExtConn::~CImpIExtConn
 *
 * Parameters (Constructor):
 *  pUnkOuter       LPUNKNOWN to which we delegate.
 */

CImpIExtConn::CImpIExtConn(LPUNKNOWN pUnkOuter)
    {
    m_cRef=0;
    m_pUnkOuter=pUnkOuter;
    m_cStrong=0;
    return;
    }

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



/*
 * CImpIExtConn::QueryInterface
 * CImpIExtConn::AddRef
 * CImpIExtConn::Release
 *
 * Purpose:
 *  Delegating IUnknown members for CImpIExtConn.
 */

STDMETHODIMP CImpIExtConn::QueryInterface(REFIID riid
    , LPVOID *ppv)
    {
    return m_pUnkOuter->QueryInterface(riid, ppv);
    }


STDMETHODIMP_(ULONG) CImpIExtConn::AddRef(void)
    {
    ++m_cRef;
    return m_pUnkOuter->AddRef();
    }

STDMETHODIMP_(ULONG) CImpIExtConn::Release(void)
    {
    --m_cRef;
    return m_pUnkOuter->Release();
    }




/*
 * CImpIExtConn::AddConnection
 *
 * Purpose:
 *  Informs the object that a connection has been made to it.  We
 *  count only strong references.
 *
 * Parameters:
 *  dwConn          DWORD identifying the type of connection, taken
 *                  from the EXTCONN enumeration.
 *  dwReserved      DWORD reserved.  This is used inside OLE and
 *                  should not be validated.
 *
 * Return Value:
 *  DWORD           The number of connection counts on the
 *                  object, used for debugging purposes only.
 */

STDMETHODIMP_(DWORD) CImpIExtConn::AddConnection
    (DWORD dwConn, DWORD dwReserved)
    {
    if (EXTCONN_STRONG==dwConn)
        {
        m_cStrong++;
        return m_cStrong;
        }

    return 0L;
    }






/*
 * CImpIExtConn::ReleaseConnection
 *
 * Purpose:
 *  Informs an object that a connection has been taken away from
 *  it in which case the object may need to shut down.
 *
 * Parameters:
 *  dwConn              DWORD identifying the type of connection,
 *                      taken from the EXTCONN enumeration.
 *  dwReserved          DWORD reserved.  This is used inside OLE and
 *                      should not be validated.
 *  fLastReleaseCloses  BOOL indicating if the last call to this
 *                      function should close the object.
 *
 * Return Value:
 *  DWORD           The number of remaining connection counts on
 *                  the object, used for debugging purposes only.
 */

STDMETHODIMP_(DWORD) CImpIExtConn::ReleaseConnection
    (DWORD dwConn, DWORD dwReserved, BOOL fLastReleaseCloses)
    {
    DWORD       dw=0L;

    if (EXTCONN_STRONG==dwConn)
        {
        dw=--m_cStrong;

        /*
         * Note that in the way we're using this interface we
         * don't care about fLastReleaseCloses.
         */
        if (0L==m_cStrong)
            m_pUnkOuter->Release();     //Closes app or doc
        }

    return dw;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品麻豆网站| 奇米精品一区二区三区四区 | 99久久777色| 欧美性受极品xxxx喷水| 日韩一区二区精品| 欧美国产精品一区二区| 日韩精品一二三四| 色美美综合视频| 日本一区二区三区在线观看| 奇米888四色在线精品| 在线观看av一区| 亚洲私人影院在线观看| 国产伦精品一区二区三区在线观看| 欧美三级在线看| 亚洲免费观看高清在线观看| 国产成人免费视频一区| 欧美xingq一区二区| 舔着乳尖日韩一区| 欧美在线观看一区二区| 国产精品久久久久久久蜜臀| 国产a视频精品免费观看| 欧美电影免费观看高清完整版在线 | 国产伦理精品不卡| 亚洲精品一区二区三区福利 | 欧美一区二区观看视频| 亚洲午夜久久久久久久久久久| 成人福利视频在线看| 久久精品亚洲一区二区三区浴池| 精品影院一区二区久久久| 日韩一区二区三区av| 免费xxxx性欧美18vr| 日韩欧美www| 日韩电影一区二区三区四区| 51精品国自产在线| 免费看日韩a级影片| 精品日产卡一卡二卡麻豆| 久久精品国产亚洲5555| 精品国产凹凸成av人网站| 国产呦萝稀缺另类资源| 国产视频一区二区在线| 国产**成人网毛片九色| 最新国产精品久久精品| 色婷婷久久一区二区三区麻豆| 亚洲精品国产视频| 777色狠狠一区二区三区| 日本va欧美va精品| 精品电影一区二区三区| 国产黄人亚洲片| 18欧美亚洲精品| 欧美视频在线一区| 日韩激情中文字幕| 精品91自产拍在线观看一区| 成人一区二区在线观看| 亚洲另类在线一区| 91麻豆精品国产91久久久久久久久 | 日韩午夜电影av| 国产v综合v亚洲欧| 亚洲图片自拍偷拍| 欧美电影免费观看高清完整版在线| 国产精品亚洲а∨天堂免在线| 国产精品无人区| 欧美日韩黄色一区二区| 国产精品一区二区男女羞羞无遮挡| 国产精品久久久一本精品| 欧美日精品一区视频| 国内不卡的二区三区中文字幕| 中文字幕在线观看不卡视频| 欧美久久久久久久久久| 国产成人啪免费观看软件| 亚洲超碰97人人做人人爱| wwwwww.欧美系列| 欧美影视一区二区三区| 国精品**一区二区三区在线蜜桃| 综合婷婷亚洲小说| 精品久久久久久久人人人人传媒| 99久久国产综合精品女不卡| 美脚の诱脚舐め脚责91| 亚洲欧美一区二区三区国产精品| 欧美一区欧美二区| 91丨porny丨首页| 国内精品视频666| 日韩av电影天堂| 一区二区在线看| 国产日韩一级二级三级| 欧美美女激情18p| 99免费精品在线| 国产成人精品免费| 久久99国产乱子伦精品免费| 五月天视频一区| 亚洲午夜在线电影| 中文字幕在线观看一区| 国产三级精品三级在线专区| 91精品在线一区二区| 色婷婷国产精品综合在线观看| 国产精品1024久久| 九九久久精品视频| 日本vs亚洲vs韩国一区三区二区 | 欧美亚洲愉拍一区二区| www.日本不卡| 国产91露脸合集magnet | 日韩精品国产精品| 亚洲成人免费在线| 亚洲一区二区3| 亚洲免费观看高清| 亚洲激情校园春色| 亚洲免费伊人电影| 一区二区理论电影在线观看| 中文字幕在线一区免费| 中文字幕乱码久久午夜不卡| 久久精品视频免费| 久久久久久一级片| 26uuu亚洲| 日本一区二区三区在线不卡| 国产欧美日产一区| 欧美国产精品一区| 中文字幕在线不卡视频| 亚洲日本在线天堂| 亚洲一二三级电影| 亚洲成人黄色小说| 捆绑调教美女网站视频一区| 韩国一区二区在线观看| 久久国产婷婷国产香蕉| 国产一区美女在线| 成人永久免费视频| 91麻豆视频网站| 欧美情侣在线播放| 精品少妇一区二区三区在线视频| 久久日韩精品一区二区五区| 久久精品一区二区三区不卡牛牛| 国产精品无遮挡| 亚洲午夜精品网| 久久se精品一区精品二区| 国产在线精品不卡| 粗大黑人巨茎大战欧美成人| 99v久久综合狠狠综合久久| 欧美自拍偷拍午夜视频| 欧美成人一区二区三区在线观看 | 亚洲r级在线视频| 日本女优在线视频一区二区 | 久久精品久久99精品久久| 国产精品1区2区3区在线观看| 成人av在线资源网| 欧美精品777| 国产欧美日韩不卡免费| 亚洲18影院在线观看| 国产专区综合网| 日本精品一区二区三区四区的功能| 欧美乱妇20p| 国产精品拍天天在线| 午夜av一区二区| 大白屁股一区二区视频| 欧美日韩国产精选| 国产精品二三区| 日本色综合中文字幕| 成人av网址在线| 欧美大片一区二区三区| 亚洲美女免费视频| 国产精品18久久久| 91精品国产综合久久久久久久久久 | 色综合天天性综合| 2欧美一区二区三区在线观看视频| 亚洲卡通欧美制服中文| 九九国产精品视频| 欧美日韩成人综合在线一区二区| 国产午夜精品在线观看| 日韩不卡一区二区| 色婷婷综合视频在线观看| 久久在线免费观看| 日韩激情一二三区| 色噜噜狠狠色综合中国| 国产日韩精品视频一区| 免费三级欧美电影| 欧美私模裸体表演在线观看| 亚洲同性gay激情无套| 国产一区999| 欧美一区二区精品久久911| 亚洲黄色免费电影| 99久久精品费精品国产一区二区| 久久精品亚洲一区二区三区浴池| 日韩成人av影视| 制服丝袜国产精品| 午夜精品视频一区| 欧美视频在线一区二区三区| 亚洲精品午夜久久久| 91丨国产丨九色丨pron| 亚洲欧美在线另类| 99精品欧美一区二区三区综合在线| 久久精品一区二区三区不卡牛牛| 国产一区二区导航在线播放| 日韩欧美的一区| 六月丁香婷婷久久| 日韩欧美电影在线| 久久国产免费看| 久久亚洲免费视频| 国产美女久久久久| 久久九九全国免费| 波波电影院一区二区三区| 国产精品欧美一区二区三区| 成人丝袜18视频在线观看| 欧美激情中文不卡|