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

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

?? object1.cpp

?? 英文版的 想要的話可以下載了 為大家服務
?? CPP
字號:
/*
 * OBJECT1.CPP
 *
 * Object implementation using interface implementations.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */

#include <windows.h>
#include "query.h"


//Message strings for the interface functions
static TCHAR szMessage[]=TEXT("Message from ISampleOne::GetMessage");
static TCHAR szString[] =TEXT("Message from ISampleTwo::GetString");


/*
 * CreateObject1
 *
 * Purpose:
 *  Creates an instance of CObject1 returning an IUnknown
 *  interface.
 *
 * Parameters:
 *  ppUnk           IUnknown ** in which to return the
 *                  interface pointer.
 *
 * Return Value:
 *  BOOL            TRUE if the function is successful,
 *                  FALSE otherwise.
 */

BOOL CreateObject1(IUnknown **ppUnk)
    {
    HRESULT     hr;
    CObject1   *pObj;

    if (NULL==ppUnk)
        return FALSE;

    //Create the new object, which gives us a C++ object pointer
    pObj=new CObject1();

    if (NULL==pObj)
        return FALSE;

    if (!pObj->Init())
        return FALSE;

    /*
     * Now get the IUnknown interface to this object and make
     * sure that it's reference count is correct.  We could either
     * typecast pObj to IUnknown and call AddRef explicitly, or
     * we can simply call pObj->QueryInterface and let it do the
     * typecast and the AddRef for us.
     */
    hr=pObj->QueryInterface(IID_IUnknown, (PPVOID)ppUnk);
    return SUCCEEDED(hr);
    }





/*
 * CObject1::CObject1
 * CObject1::~CObject1
 *
 * Constructor Parameters:
 *  None
 */

CObject1::CObject1(void)
    {
    m_cRef=0;

    m_pImpISampleOne=NULL;
    m_pImpISampleTwo=NULL;

    return;
    }

CObject1::~CObject1(void)
    {
    //Delete the interface implementations created in Init
    DeleteInterfaceImp(m_pImpISampleTwo);
    DeleteInterfaceImp(m_pImpISampleOne);
    return;
    }



/*
 * CObject1::Init
 *
 * Purpose:
 *  Instantiates the interface implementations for this object.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  BOOL            TRUE if initialization succeeds, FALSE otherwise.
 */

BOOL CObject1::Init(void)
    {
    /*
     * Creating the interfaces means creating instances of
     * the interface implementation classes.  The constructor
     * parameters is a pointer to CObject1 that has the
     * IUnknown functions to which the interface implementations
     * delegate.
     */

    m_pImpISampleOne=new CImpISampleOne(this);

    if (NULL==m_pImpISampleOne)
        return FALSE;

    m_pImpISampleTwo=new CImpISampleTwo(this);

    if (NULL==m_pImpISampleTwo)
        return FALSE;

    return TRUE;
    }






/*
 * CObject1::QueryInterface
 *
 * Purpose:
 *  Manages the interfaces for this object which supports the
 *  IUnknown, ISampleOne, and ISampleTwo interfaces.
 *
 * Parameters:
 *  riid            REFIID of the interface to return.
 *  ppv             PPVOID in which to store the pointer.
 *
 * Return Value:
 *  HRESULT         NOERROR on success, E_NOINTERFACE if the
 *                  interface is not supported.
 */

STDMETHODIMP CObject1::QueryInterface(REFIID riid, PPVOID ppv)
    {
    //Always NULL the out-parameters
    *ppv=NULL;

    /*
     * IUnknown comes from CObject1.  Note that here and in
     * the lines below we do not need to explicitly typecast
     * the object pointers into interface pointers because
     * the vtables are identical.  If we had additional virtual
     * member functions in the object, we would have to cast
     * in order to set the right vtable.  This is demonstrated
     * in the multiple-inheritance version, CObject3.
     */
    if (IID_IUnknown==riid)
        *ppv=this;

    //Other interfaces come from interface implementations
    if (IID_ISampleOne==riid)
        *ppv=m_pImpISampleOne;

    if (IID_ISampleTwo==riid)
        *ppv=m_pImpISampleTwo;

    if (NULL==*ppv)
        return ResultFromScode(E_NOINTERFACE);

    //AddRef any interface we'll return.
    ((LPUNKNOWN)*ppv)->AddRef();
    return NOERROR;
    }



/*
 * CObject1::AddRef
 * CObject1::Release
 *
 * Reference counting members.  When Release sees a zero count
 * the object destroys itself.
 */

DWORD CObject1::AddRef(void)
    {
    return ++m_cRef;
    }

DWORD CObject1::Release(void)
    {
    if (0!=--m_cRef)
        return m_cRef;

    delete this;
    return 0;
    }




//CImpISampleOne interface implementation


/*
 * CImpISampleOne::CImpISampleOne
 * CImpISampleOne::~CImpISampleOne
 *
 * Constructor Parameters:
 *  pObj            PCObject1 to the outer object
 */

CImpISampleOne::CImpISampleOne(PCObject1 pObj)
    {
    m_cRef=0;
    m_pObj=pObj;
    return;
    }

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



/*
 * CImpISampleOne::QueryInterface
 * CImpISampleOne::AddRef
 * CImpISampleOne::Release
 *
 * IUnknown members that delegate to m_pObj
 */

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

DWORD CImpISampleOne::AddRef(void)
    {
    /*
     * We maintain an "interface reference count" for debugging
     * purposes, because the client of an object should match
     * AddRef and Release calls through each interface pointer.
     */
    ++m_cRef;
    return m_pObj->AddRef();
    }

DWORD CImpISampleOne::Release(void)
    {
    /*
     * m_cRef is again only for debugging.  It doesn't affect
     * CObject1 although the call to m_pObj->Release does.
     */
    --m_cRef;
    return m_pObj->Release();
    }



/*
 * CImpISampleOne::GetMessage
 *
 * Purpose:
 *  Returns a string to the caller.
 *
 * Parameters:
 *  psz             LPTSTR in which to store the string.
 *  cch             UINT size of psz.
 *
 * Return Value:
 *  HRESULT         NOERROR if the string is stored, E_OUTOFMEMORY
 *                  if the buffer is too small.
 */

STDMETHODIMP CImpISampleOne::GetMessage(LPTSTR psz, UINT cch)
    {
    if (NULL==psz)
        return ResultFromScode(E_POINTER);

    if (cch < (UINT)lstrlen(szMessage))
        return ResultFromScode(E_OUTOFMEMORY);

    lstrcpy(psz, szMessage);
    return NOERROR;
    }







//CImpISampleTwo interface implementation


/*
 * CImpISampleTwo::CImpISampleTwo
 * CImpISampleTwo::~CImpISampleTwo
 *
 * Constructor Parameters:
 *  pObj            PCObject1 to the outer object
 */

CImpISampleTwo::CImpISampleTwo(PCObject1 pObj)
    {
    m_cRef=0;
    m_pObj=pObj;
    return;
    }

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



/*
 * CImpISampleTwo::QueryInterface
 * CImpISampleTwo::AddRef
 * CImpISampleTwo::Release
 *
 * IUnknown members that delegate to m_pObj
 */

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

DWORD CImpISampleTwo::AddRef(void)
    {
    /*
     * We maintain an "interface reference count" for debugging
     * purposes, because the client of an object should match
     * AddRef and Release calls through each interface pointer.
     */
    ++m_cRef;
    return m_pObj->AddRef();
    }

DWORD CImpISampleTwo::Release(void)
    {
    /*
     * m_cRef is again only for debugging.  It doesn't affect
     * CObject1 although the call to m_pObj->Release does.
     */
    --m_cRef;
    return m_pObj->Release();
    }



/*
 * CImpISampleTwo::GetString
 *
 * Purpose:
 *  Returns a string to the caller.
 *
 * Parameters:
 *  psz             LPTSTR in which to store the string.
 *  cch             UINT size of psz.
 *
 * Return Value:
 *  HRESULT         NOERROR if the string is stored, E_OUTOFMEMORY
 *                  if the buffer is too small.
 */

STDMETHODIMP CImpISampleTwo::GetString(LPTSTR psz, UINT cch)
    {
    if (NULL==psz)
        return ResultFromScode(E_POINTER);

    if (cch < (UINT)lstrlen(szString))
        return ResultFromScode(E_OUTOFMEMORY);

    lstrcpy(psz, szString);
    return NOERROR;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲精品视频在线观看| 欧美精品一区二区三区一线天视频 | 91亚洲国产成人精品一区二区三| 在线精品视频免费观看| 国产亚洲视频系列| 天天影视涩香欲综合网| 99久久精品免费| 日韩免费性生活视频播放| 亚洲精品国产无天堂网2021| 精品一二线国产| 91精品国产综合久久久久久久久久| 国产精品电影一区二区三区| 精品一区二区三区视频 | 久久综合视频网| 亚州成人在线电影| 91女人视频在线观看| 欧美国产一区视频在线观看| 国产乱码精品一区二区三区五月婷| 欧美日韩和欧美的一区二区| 自拍偷拍亚洲欧美日韩| 国产精品91一区二区| 亚洲精品一线二线三线无人区| 五月天中文字幕一区二区| 在线观看日韩国产| 日韩毛片高清在线播放| av一二三不卡影片| 国产精品久久久久久久久免费丝袜 | 国产精品一二三区在线| 欧美mv和日韩mv的网站| 免费成人美女在线观看| 欧美一区2区视频在线观看| 日韩高清中文字幕一区| 日韩一二三四区| 看电影不卡的网站| 久久久久久9999| 国产成人亚洲精品青草天美| 亚洲国产经典视频| 91浏览器入口在线观看| 亚洲成人av免费| 欧美一区二区三区四区久久| 寂寞少妇一区二区三区| 久久久精品人体av艺术| 成人动漫在线一区| 亚洲少妇中出一区| 欧美精品一二三| 另类小说色综合网站| 国产精品天干天干在观线| 色噜噜狠狠一区二区三区果冻| 亚洲精品国久久99热| 欧美视频中文一区二区三区在线观看| 亚洲综合色网站| 欧美一区二区三区免费在线看| 国产乱码精品一品二品| 自拍偷拍亚洲综合| 91精品国产综合久久久久久久久久| 国内一区二区在线| 成人欧美一区二区三区白人| 欧美人体做爰大胆视频| 国产精品自在在线| 亚洲一区二区三区在线| 日韩欧美国产一区在线观看| 成人污污视频在线观看| 亚洲午夜精品网| 久久天堂av综合合色蜜桃网| 91原创在线视频| 久久狠狠亚洲综合| 亚洲精品久久久蜜桃| 精品国产免费人成电影在线观看四季| 成人免费三级在线| 美女一区二区视频| 亚洲精品国产视频| 久久久久久久av麻豆果冻| 欧美性色黄大片| 春色校园综合激情亚洲| 青青草原综合久久大伊人精品 | 日韩一区二区中文字幕| 99免费精品在线| 麻豆一区二区在线| 亚洲另类在线视频| 国产清纯在线一区二区www| 欧美色涩在线第一页| 国产成人三级在线观看| 天天综合天天做天天综合| 国产精品免费看片| 欧美成人a∨高清免费观看| 91女神在线视频| 豆国产96在线|亚洲| 日本伊人午夜精品| 亚洲一区视频在线| 亚洲欧洲精品一区二区精品久久久 | 亚洲一区二区三区爽爽爽爽爽| 国产亚洲一二三区| 欧美电影精品一区二区| 欧美日韩激情一区二区| 色88888久久久久久影院野外| 国产成人综合精品三级| 久久国产免费看| 男女激情视频一区| 亚洲午夜电影在线| 亚洲综合成人网| 有码一区二区三区| 亚洲欧美日韩成人高清在线一区| 欧美精彩视频一区二区三区| 欧美成人免费网站| 精品国产一区久久| 欧美成人r级一区二区三区| 欧美一级精品在线| 日韩你懂的电影在线观看| 日韩一区二区在线看片| 日韩精品一区二区三区视频 | 欧美久久久影院| 欧美日韩精品欧美日韩精品一| 色偷偷一区二区三区| 色综合久久久久综合体桃花网| caoporn国产一区二区| 99这里只有精品| 91丨九色porny丨蝌蚪| 99精品偷自拍| 在线亚洲人成电影网站色www| 色8久久人人97超碰香蕉987| 欧美日韩在线播| 欧美精品日韩一区| 精品福利一二区| 国产欧美日韩三区| 亚洲欧美另类综合偷拍| 亚洲午夜精品网| 日本欧美久久久久免费播放网| 麻豆91在线播放| 国产福利视频一区二区三区| 成人av一区二区三区| 91视频com| 日韩一区二区视频在线观看| www国产亚洲精品久久麻豆| 国产亚洲欧美日韩日本| 亚洲国产精品99久久久久久久久| 亚洲日本韩国一区| 日产国产高清一区二区三区| 国产一区二区精品久久99| 波多野结衣在线aⅴ中文字幕不卡| 色哟哟一区二区在线观看| 欧美一区永久视频免费观看| 精品处破学生在线二十三| 国产精品每日更新| 日本aⅴ亚洲精品中文乱码| 久久精品国产在热久久| 成人av网站免费观看| 欧洲精品一区二区三区在线观看| 欧美精品九九99久久| 欧美激情一区二区在线| 亚洲成人先锋电影| 国产成人精品一区二区三区四区 | 欧美日韩欧美一区二区| 精品国产乱码久久久久久久久| 亚洲图片激情小说| 麻豆91免费观看| 在线亚洲精品福利网址导航| 精品播放一区二区| 亚洲一二三区不卡| 国产传媒一区在线| 在线电影国产精品| 亚洲欧洲av色图| 国产精品99久久久久久有的能看 | 久久成人18免费观看| 一本大道av一区二区在线播放| 日韩精品一区二区三区视频在线观看| 国产精品久久久久久户外露出 | 国产精品丝袜91| 男女男精品网站| 欧美性猛交xxxx黑人交| 亚洲国产精品精华液2区45| 爽爽淫人综合网网站| 91天堂素人约啪| 国产欧美一区二区精品忘忧草| 亚洲一二三区不卡| 91亚洲大成网污www| 国产拍揄自揄精品视频麻豆| 日本不卡在线视频| 欧洲一区在线电影| 国产精品女人毛片| 国产高清不卡一区| 久久人人97超碰com| 亚洲日本欧美天堂| 欧美一区二区人人喊爽| 一区二区免费在线播放| 91在线视频免费91| 国产精品美女久久久久aⅴ| 国产精品一二三四| 精品国产91九色蝌蚪| 久久黄色级2电影| 制服丝袜日韩国产| 午夜久久久久久久久| 欧美三级电影网| 亚洲午夜激情av| 欧美日韩日本视频| 日韩国产在线观看一区| 欧美日韩精品一区视频| 亚洲成人av一区二区| 欧美乱妇15p| 日韩黄色在线观看| 日韩午夜精品电影|