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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? iolecont.cpp

?? 英文版的 想要的話可以下載了 為大家服務(wù)
?? CPP
字號(hào):
/*
 * IOLECONT.CPP
 * Patron Chapter 22
 *
 * Implementation of the IOleItemContainer interface for Patron's
 * CPage and CPatronDoc alike, using the constructor parameter fDoc
 * to differentiate.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include <stdlib.h>
#include "patron.h"


/*
 * CImpIOleItemContainer::CImpIOleItemContainer
 * CImpIOleItemContainer::~CImpIOleItemContainer
 *
 * Parameters (Constructor):
 *  pObj            LPVOID of the page or pages.
 *  pUnkOuter       LPUNKNOWN to which we delegate.
 *  fDoc            BOOL indicating if we're in CPatronDoc or CPage
 */

CImpIOleItemContainer::CImpIOleItemContainer(LPVOID pObj
    , LPUNKNOWN pUnkOuter, BOOL fDoc)
    {
    m_cRef=0;
    m_fDoc=fDoc;

    if (fDoc)
        {
        m_pDoc=(PCPatronDoc)pObj;
        m_pPage=NULL;
        }
    else
        {
        m_pDoc=NULL;
        m_pPage=(PCPage)pObj;
        }

    m_pUnkOuter=pUnkOuter;
    return;
    }

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




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

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


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

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



/*
 * CImpIOleItemContainer::ParseDisplayName
 *
 * Purpose:
 *  Inherited member of IParseDisplayName that takes a string name
 *  and turns out a moniker for it.
 *
 * Parameters:
 *  pbc             LPBC to the binding context
 *  pszName         LPOLESTR to the name to parse.
 *  pchEaten        ULONG * into which to store how many
 *                  characters we scanned in the display name.
 *  ppmk            LPMONIKER * in which to return the moniker.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIOleItemContainer::ParseDisplayName(LPBC pbc
    , LPOLESTR pszName, ULONG *pchEaten, LPMONIKER *ppmk)
    {
    OLECHAR     ch;
    ULONG       chEaten=0;
    TCHAR       szName[256];
    TCHAR       szComp[15];
    LPTSTR      psz;
    UINT        cch;

    *ppmk=NULL;
    *pchEaten=0;

    /*
     * All we have to look for is the string between the !
     * delimeters (or a null terminator).  pszName should be pointing
     * to a !, so skip it and scan the string for a ! or 0,
     * then pass the result to CreateItemMoniker.
     */

    psz=szName;

    ch=*pszName++;
    chEaten++;

    if ((OLECHAR)'!'!=ch)
        return ResultFromScode(MK_E_SYNTAX);

    ch=*pszName++;

    while ((OLECHAR)0!=ch && (OLECHAR)'!' !=ch)
        {
        *psz++=(TCHAR)ch;
        chEaten++;
        ch=*pszName++;
        }

    *psz=(TCHAR)0;

    /*
     * Syntax check.  If we're the DOcument object, check for
     * "Page n" at the beginning of the string.  Otherwise check
     * for "Tenant n".
     */
    lstrcpy(szComp, m_fDoc ? TEXT("Page ") : TEXT("Tenant "));

    //Does szName start with szComp?
    cch=lstrlen(szComp);

    if (0!=_tcsncicmp(szName, szComp, cch))
        {
        *pchEaten=1;    //Parsed ! at least
        return ResultFromScode(MK_E_SYNTAX);
        }

    //Check for a number in szName
    if ((TCHAR)'0' != szName[cch])
        {
        if (0==_ttoi(szName+cch))
            {
            *pchEaten=cch;  //Got past name
            return ResultFromScode(MK_E_SYNTAX);
            }
        }

    *pchEaten=chEaten;
   #ifdef WIN32ANSI
    //Use the ANSI version here since szName is ANSI
    return INOLE_CreateItemMoniker(TEXT("!"), szName, ppmk);
   #else
    return CreateItemMoniker(OLETEXT("!"), szName, ppmk);
   #endif
    }




/*
 * CImpIOleItemContainer::EnumObjects
 *
 * Purpose:
 *  Creates and returns an IEnumUnknown object that allows the
 *  caller to walk through the objects in this continer thing.
 *
 * Parameters:
 *  dwFlags         DWORD specifying what kind of objects to
 *                  enumerate.
 *  ppEnum          LPENUMUNKNOWN * into which to return the
 *                  enumerator
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIOleItemContainer::EnumObjects(DWORD dwFlags
    , LPENUMUNKNOWN *ppEnum)
    {
    *ppEnum=NULL;
    return ResultFromScode(E_NOTIMPL);
    }




/*
 * CImpIOleItemContainer::LockContainer
 *
 * Purpose:
 *  Establishes a lock on the container to prevent it from shutting
 *  down outside of user control.  This is used to control the
 *  lifetime of the container when it's used to update a link to an
 *  embedded object within it.  If we're unlock and the user has not
 *  taken control, we close.
 *
 * Parameters:
 *  fLock           BOOL indicating a lock or unlock.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIOleItemContainer::LockContainer(BOOL fLock)
    {
    /*
     * This is pretty much the same implementation as
     * IClassFactory::LockServer, and we can use the same lock
     * count to accomplish our goal.
     */

    if (fLock)
        g_cLock++;
    else
        {
        g_cLock--;
        g_cObj++;
        ObjectDestroyed();
        }

    return NOERROR;
    }






/*
 * CImpIOleItemContainer::GetObject
 *
 * Purpose:
 *  Returns the requested interface pointer on an object in this
 *  container.
 *
 * Parameters:
 *  pszItem         LPOLESTR to the item we must locate.
 *  dwSpeed         DWORD identifying how long the caller is willing
 *                  to wait.
 *  pcb             LPBINDCTX providing the binding context.
 *  riid            REFIID of the interface requested.
 *  ppv             PPVOID into which to return the object.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIOleItemContainer::GetObject(LPOLESTR pszItem
    , DWORD dwSpeed, LPBINDCTX pbc, REFIID riid, PPVOID ppv)
    {
    DWORD       dw;
    char        szTemp[40];     //ANSI for atol
    HRESULT     hr=ResultFromScode(E_FAIL);
    PCPage      pPage;
    PCTenant    pTenant;
    LPUNKNOWN   pObj;
    UINT        i, iCur;

    *ppv=NULL;

    if (m_fDoc)
        {
        /*
         * The item name should be "Page n", so we'll do it the
         * easy way:  call atol on pszItem+5 (we always know that
         * we'll have "Page " there since we put it there (see
         * CPage::GetStorageName).
         */

        UNICODETOANSI((pszItem+5), szTemp, sizeof(szTemp));
        dw=atol(szTemp);

        i=m_pDoc->m_pPG->IPageGetFromID(dw, &pPage, FALSE);

        if (NOVALUE==i)
            return hr;

        /*
         * If we're asked for immediate speed, only do this if the
         * page is already current, i.e. everything is loaded.
         */
        iCur=m_pDoc->m_pPG->CurPageGet();

        if (BINDSPEED_IMMEDIATE==dwSpeed && iCur!=i)
            return ResultFromScode(MK_E_EXCEEDEDDEADLINE);

        m_pDoc->m_pPG->CurPageSet(i);

        //This will have changed to be the current page now.
        if (NULL!=m_pDoc->m_pPG->m_pPageCur)
            hr=m_pDoc->m_pPG->m_pPageCur->QueryInterface(riid, ppv);
        }
    else
        {
        if (TenantFromName(pszItem, &pTenant))
            {
            pTenant->ObjectGet(&pObj);

            /*
             * If we're asked for immediate or moderate, only work
             * if the object is already running.
             */
            hr=IsRunning(pszItem);  //This is the function below

            if ((BINDSPEED_IMMEDIATE==dwSpeed
                || BINDSPEED_MODERATE==dwSpeed) && NOERROR!=hr)
                hr=ResultFromScode(MK_E_EXCEEDEDDEADLINE);
            else
                {
                //IMPORTANT:  Make sure this object is running first
                OleRun(pObj);
                hr=pObj->QueryInterface(riid, ppv);
                }

            pObj->Release();
            }
        else
            hr=ResultFromScode(MK_E_NOOBJECT);
        }

    return hr;
    }






/*
 * CImpIOleItemContainer::GetObjectStorage
 *
 * Purpose:
 *  Similar to get Object in that we have to locate the object
 *  described by a given name, but instead of returning any old
 *  interface we return a storage element.
 *
 * Parameters:
 *  pszItem         LPOLESTR to the item we must locate.
 *  pcb             LPBINDCTX providing the binding context.
 *  riid            REFIID of the interface requested.  Usually
 *                  IStorage or IStream.
 *  ppv             PPVOID into which to return the object.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIOleItemContainer::GetObjectStorage(LPOLESTR pszItem
    , LPBINDCTX pbc, REFIID riid, PPVOID ppv)
    {
    PCTenant    pTenant;

    *ppv=NULL;

    if (m_fDoc)
        return ResultFromScode(E_NOTIMPL);

    //Can only handle IStorage.
    if (IID_IStorage!=riid)
        return ResultFromScode(E_NOINTERFACE);

    if (TenantFromName(pszItem, &pTenant))
        pTenant->StorageGet((LPSTORAGE *)ppv);

    return (NULL!=*ppv) ? NOERROR : ResultFromScode(E_FAIL);
    }






/*
 * CImpIOleItemContainer::IsRunning
 *
 * Purpose:
 *  Answers if the object under the given name is currently running.
 *
 * Parameters:
 *  pszItem         LPOLESTR of the item to check
 *
 * Return Value:
 *  HRESULT         NOERROR if the object is running, S_FALSE
 *                  otherwise.  Possibly MK_E_NOOBJECT if the name
 *                  is bogus.
 */

STDMETHODIMP CImpIOleItemContainer::IsRunning(LPOLESTR pszItem)
    {
    HRESULT     hr;
    PCTenant    pTenant;
    LPUNKNOWN   pObj;
    LPOLEOBJECT pIOleObject;

    /*
     * If this is the document's container interface, the object
     * is a page and the page is always running.
     */
    if (m_fDoc)
        return NOERROR;
    else
        {
        if (TenantFromName(pszItem, &pTenant))
            {
            //Ask the actual object if its running.
            pTenant->ObjectGet(&pObj);
            hr=pObj->QueryInterface(IID_IOleObject
                , (PPVOID)&pIOleObject);
            pObj->Release();

            if (SUCCEEDED(hr))
                {
                hr=(OleIsRunning(pIOleObject))
                    ? NOERROR : ResultFromScode(S_FALSE);
                pIOleObject->Release();
                }
            }
        else
            hr=ResultFromScode(MK_E_NOOBJECT);
        }

    return hr;
    }




/*
 * CImpIOleItemContainer::TenantFromName
 * (Private)
 *
 * Purpose:
 *  This function which is NOT part of the interface retrieves
 *  a tenant pointer from a tenant name.
 *
 * Parameters:
 *  pszItem         LPOLESTR of the tenant to locate.
 *  ppTenant        PCTenant * in which to return the pointer.
 *
 * Return Value:
 *  BOOL            TRUE if successful, FALSE otherwise.
 */

BOOL CImpIOleItemContainer::TenantFromName(LPOLESTR pszItem
    , PCTenant *ppTenant)
    {
    DWORD       dw;
    char        szTemp[40];     //ANSI for atol

    if (m_fDoc)
        return FALSE;

    //The item name should be "Tenant xxxx", so use pszItem+7.
    UNICODETOANSI((pszItem+7), szTemp, sizeof(szTemp));
    dw=atol(szTemp);

    *ppTenant=NULL;

    return m_pPage->TenantGetFromID(dw, ppTenant, FALSE);
    }

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美丰满少妇xxxxx高潮对白| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 欧美韩国日本不卡| 91精品国产高清一区二区三区蜜臀| 91成人在线精品| 91性感美女视频| 91麻豆自制传媒国产之光| 国产不卡免费视频| 久久精品av麻豆的观看方式| 捆绑紧缚一区二区三区视频| 日本亚洲一区二区| 麻豆成人av在线| 麻豆精品一区二区三区| 久久国产精品无码网站| 免费在线成人网| 韩国av一区二区三区| 理论片日本一区| 精品一区中文字幕| 国产很黄免费观看久久| 国产传媒欧美日韩成人| www.亚洲国产| 99精品国产一区二区三区不卡| 91蝌蚪国产九色| 色综合久久中文字幕| 色菇凉天天综合网| 91.麻豆视频| 精品美女一区二区| 国产精品伦理在线| 亚洲乱码中文字幕综合| 午夜视频在线观看一区二区| 午夜精品久久久久影视| 亚洲精品日韩综合观看成人91| 亚洲欧洲成人自拍| 亚洲欧美日韩国产中文在线| 亚洲美女屁股眼交| 偷拍与自拍一区| 捆绑紧缚一区二区三区视频| 久久91精品国产91久久小草| 国产在线精品免费av| 97精品久久久午夜一区二区三区| 色婷婷综合久久久中文字幕| 91精品国产欧美一区二区18 | 三级久久三级久久久| 久久激情综合网| 99亚偷拍自图区亚洲| 色综合久久久网| 欧美美女一区二区在线观看| 欧美精品一区二区不卡| 国产日韩精品一区二区三区| 亚洲电影在线播放| 久久超级碰视频| 色综合久久久久综合体桃花网| 欧美三级日韩三级| 中日韩av电影| 亚洲第一激情av| 日本色综合中文字幕| 国产不卡视频在线观看| av激情成人网| 精品国产123| 亚洲图片另类小说| 国产一区二区三区黄视频 | 亚洲欧美在线另类| 偷偷要91色婷婷| 国产成人精品一区二区三区网站观看| 日本韩国欧美在线| 精品人在线二区三区| 亚洲精品成a人| 国产在线播放一区三区四| 成人午夜碰碰视频| 91精品国产综合久久婷婷香蕉| 欧美电视剧免费全集观看| 亚洲综合999| 国产福利91精品| 欧美日韩视频在线第一区 | 亚洲综合丝袜美腿| 国产91精品一区二区麻豆网站 | 亚洲三级在线免费观看| 日产欧产美韩系列久久99| 青娱乐精品在线视频| 欧亚洲嫩模精品一区三区| 日韩精品最新网址| 亚洲一区日韩精品中文字幕| 国产精品1区2区| 欧美xxxxxxxx| 性感美女极品91精品| 91久久精品一区二区三区| 国产三级精品视频| 日本不卡的三区四区五区| 94色蜜桃网一区二区三区| 日韩欧美中文字幕一区| 性久久久久久久久久久久| yourporn久久国产精品| 亚洲国产电影在线观看| 麻豆专区一区二区三区四区五区| 色综合久久中文综合久久牛| 久久蜜桃一区二区| 三级不卡在线观看| 91网站最新网址| 国产婷婷色一区二区三区| 免费黄网站欧美| 欧美色网一区二区| 悠悠色在线精品| 91蝌蚪porny| 国产精品久久久久一区二区三区共 | 一区二区三区小说| 91网址在线看| 国产精品久久久久久户外露出 | 欧美一区二区三区在线观看视频| 亚洲国产一区二区三区青草影视| 99久久国产综合色|国产精品| 日韩伦理电影网| 99精品欧美一区二区三区小说| 亚洲另类春色国产| 97精品久久久久中文字幕| 亚洲精品综合在线| 成人av综合在线| 中文一区一区三区高中清不卡| 欧美探花视频资源| 一区二区三区四区不卡在线| 91原创在线视频| 成人免费在线播放视频| 91在线播放网址| 国产精品久久久久久久蜜臀| 成年人网站91| 亚洲日本青草视频在线怡红院| 成人午夜碰碰视频| 亚洲欧美在线视频观看| 91麻豆成人久久精品二区三区| 最新欧美精品一区二区三区| 不卡视频在线看| 亚洲天堂av一区| 91亚洲精品久久久蜜桃网站| 日韩理论片网站| 色婷婷av一区二区三区软件| 亚洲激情图片小说视频| 欧美一区欧美二区| 狠狠色狠狠色综合| 中文字幕在线观看不卡视频| 91丨porny丨首页| 青青草原综合久久大伊人精品优势| 欧美高清一级片在线| 亚洲国产精品久久人人爱蜜臀| 欧美美女视频在线观看| 婷婷六月综合网| 国产亚洲福利社区一区| 成人app软件下载大全免费| 香港成人在线视频| 欧美久久婷婷综合色| 精品在线免费视频| 国产精品免费视频一区| 在线影院国内精品| 毛片不卡一区二区| 国产精品视频第一区| 成人一区二区三区| 亚洲成人免费影院| 久久综合九色综合欧美就去吻| 大白屁股一区二区视频| 亚洲一区二区av在线| 3d成人h动漫网站入口| 国产高清久久久久| 亚洲精品成a人| 欧美成人乱码一区二区三区| 蜜臀av在线播放一区二区三区| 国产日产精品1区| 日韩一区二区三区三四区视频在线观看| 国产一区在线观看麻豆| 亚洲影院免费观看| 久久免费国产精品| 5566中文字幕一区二区电影| 国产ts人妖一区二区| 日本成人在线电影网| 国产日韩欧美一区二区三区综合| 69精品人人人人| 风间由美一区二区av101| 亚洲国产成人精品视频| 久久久国产精品午夜一区ai换脸| 在线一区二区三区四区五区 | 99久久精品免费看| 欧美aaaaaa午夜精品| 国产精品成人免费在线| 日韩美女一区二区三区四区| 日本精品裸体写真集在线观看| 极品少妇xxxx精品少妇| 亚洲日本va在线观看| 精品国产1区2区3区| 欧美一区二区三区在线电影| 91色综合久久久久婷婷| 国产91色综合久久免费分享| 爽好久久久欧美精品| 亚洲一区视频在线观看视频| 国产清纯白嫩初高生在线观看91| 欧美电影免费观看高清完整版在线 | 国产乱理伦片在线观看夜一区| 北岛玲一区二区三区四区| 香蕉加勒比综合久久| 日韩午夜激情免费电影| 色综合久久88色综合天天| 亚洲成人综合视频| 成人欧美一区二区三区视频网页| 精品国产麻豆免费人成网站|