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

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

?? beeper.cpp

?? 英文版的 想要的話可以下載了 為大家服務(wù)
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*
 * BEEPER.CPP
 * Beeper Automation Object #4 Chapter 14
 *
 * Implementation of the CBeeper class demonstrating the use of
 * dual interface.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "beeper.h"

extern HINSTANCE g_hInst;

#ifdef WIN32
extern DWORD     g_dwTLS;
#endif


/*
 * CBeeper::CBeeper
 * CBeeper::~CBeeper
 *
 * Parameters (Constructor):
 *  pUnkOuter       LPUNKNOWN of a controlling unknown.
 *  pfnDestroy      PFNDESTROYED to call when an object
 *                  is destroyed.
 */

CBeeper::CBeeper(LPUNKNOWN pUnkOuter, PFNDESTROYED pfnDestroy)
    {
    m_cRef=0;
    m_pUnkOuter=pUnkOuter;
    m_pfnDestroy=pfnDestroy;

    m_lSound=0;

    //These are created as needed in GetTypeInfo
    m_pITINeutral=NULL;
    m_pITIGerman=NULL;
    return;
    }


CBeeper::~CBeeper(void)
    {
    ReleaseInterface(m_pITIGerman);
    ReleaseInterface(m_pITINeutral);
    return;
    }



/*
 * CBeeper::Init
 *
 * Purpose:
 *  Performs any intiailization of a CBeeper that's prone to failure
 *  that we also use internally before exposing the object outside.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  BOOL            TRUE if the function is successful,
 *                  FALSE otherwise.
 */

BOOL CBeeper::Init(void)
    {
    LPUNKNOWN       pIUnknown=this;

    if (NULL!=m_pUnkOuter)
        pIUnknown=m_pUnkOuter;

    return TRUE;
    }



/*
 * CBeeper::QueryInterface
 * CBeeper::AddRef
 * CBeeper::Release
 */

STDMETHODIMP CBeeper::QueryInterface(REFIID riid, PPVOID ppv)
    {
    *ppv=NULL;

    /*
     * IUnknown, IBeeper, and IDispatch are all
     * part of CBeeper now.
     */
    if (IID_IUnknown==riid || IID_IBeeper==riid
        || IID_IDispatch==riid)
        *ppv=this;

    //Indicate that we support error information
    if (IID_ISupportErrorInfo==riid)
        *ppv=m_pImpISuppErr;

    //AddRef any interface we'll return.
    if (NULL!=*ppv)
        {
        ((LPUNKNOWN)*ppv)->AddRef();
        return NOERROR;
        }

    return ResultFromScode(E_NOINTERFACE);
    }


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


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

    if (NULL!=m_pfnDestroy)
        (*m_pfnDestroy)();

    delete this;
    return 0L;
    }



//IDispatch functions, now part of CBeeper

/*
 * CBeeper::GetTypeInfoCount
 *
 * Purpose:
 *  Returns the number of type information (ITypeInfo) interfaces
 *  that the object provides (0 or 1).
 *
 * Parameters:
 *  pctInfo         UINT * to the location to receive
 *                  the count of interfaces.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error code.
 */

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




/*
 * CBeeper::GetTypeInfo
 *
 * Purpose:
 *  Retrieves type information for the automation interface.  This
 *  is used anywhere that the right ITypeInfo interface is needed
 *  for whatever LCID is applicable.  Specifically, this is used
 *  from within GetIDsOfNames and Invoke.
 *
 * Parameters:
 *  itInfo          UINT reserved.  Must be zero.
 *  lcid            LCID providing the locale for the type
 *                  information.  If the object does not support
 *                  localization, this is ignored.
 *  ppITypeInfo     ITypeInfo ** in which to store the ITypeInfo
 *                  interface for the object.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error code.
 */

STDMETHODIMP CBeeper::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;

    /*
     * Since we returned one from GetTypeInfoCount, this function
     * can be called for a specific locale.  We support English,
     * German, and neutral (defaults to English) locales.  Anything
     * else is an error.
     *
     * After this switch statement, ppITI will either be NULL or
     * a valid pointer in it after.  If NULL, we know we need to
     * load type information, retrieve the ITypeInfo we want, and
     * then store it in *ppITI.
     */
    switch (PRIMARYLANGID(lcid))
        {
        case LANG_NEUTRAL:
        case LANG_ENGLISH:
            ppITI=&m_pITINeutral;
            break;

        case LANG_GERMAN:
            ppITI=&m_pITIGerman;
            break;

        default:
            return ResultFromScode(DISP_E_UNKNOWNLCID);
        }

    //Load a type lib if we don't have the information already.
    if (NULL==*ppITI)
        {
        /*
         * The type libraries are registered under 0 (neutral),
         * 7 (German), and 9 (English) with no specific sub-
         * language, which would make them 407 or 409 and such.
         * If you are sensitive to sub-languages, then use the
         * full LCID instead of just the LANGID as done here.
         */
        hr=LoadRegTypeLib(LIBID_BeeperTypeLibrary, 1, 0
            , PRIMARYLANGID(lcid), &pITypeLib);

        /*
         * If LoadRegTypeLib fails, try loading directly with
         * LoadTypeLib, which will register the library for us.
         * Note that there's no default case here because the
         * prior switch will have filtered lcid already.
         *
         * NOTE:  You should prepend your DIR registry key to the
         * .TLB name so you don't depend on it being it the PATH.
         * This sample will be updated later to reflect this.
         */
        if (FAILED(hr))
            {
            switch (PRIMARYLANGID(lcid))
                {
                case LANG_NEUTRAL:
                case LANG_ENGLISH:
                    hr=LoadTypeLib(OLETEXT("BEEP0000.TLB"), &pITypeLib);
                    break;

                case LANG_GERMAN:
                    hr=LoadTypeLib(OLETEXT("BEEP0007.TLB"), &pITypeLib);
                    break;
                }
            }

        if (FAILED(hr))
            return hr;

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

        if (FAILED(hr))
            return hr;
        }

    /*
     * Note:  the type library is still loaded since we have
     * an ITypeInfo from it.
     */

    (*ppITI)->AddRef();
    *ppITypeInfo=*ppITI;
    return NOERROR;
    }





/*
 * CBeeper::GetIDsOfNames
 *
 * Purpose:
 *  Converts text names into DISPIDs to pass to Invoke
 *
 * Parameters:
 *  riid            REFIID reserved.  Must be IID_NULL.
 *  rgszNames       OLECHAR ** pointing to the array of names to be
 *                  mapped.
 *  cNames          UINT number of names to be mapped.
 *  lcid            LCID of the locale.
 *  rgDispID        DISPID * caller allocated array containing IDs
 *                  corresponging to those names in rgszNames.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error code.
 */

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

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

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

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

    return hr;
    }



/*
 * CBeeper::Invoke
 *
 * Purpose:
 *  Calls a method in the dispatch interface or manipulates a
 *  property.
 *
 * Parameters:
 *  dispID          DISPID of the method or property of interest.
 *  riid            REFIID reserved, must be IID_NULL.
 *  lcid            LCID of the locale.
 *  wFlags          USHORT describing the context of the invocation.
 *  pDispParams     DISPPARAMS * to the array of arguments.
 *  pVarResult      VARIANT * in which to store the result.  Is
 *                  NULL if the caller is not interested.

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
●精品国产综合乱码久久久久| 国产精品视频看| 成人激情免费网站| 石原莉奈在线亚洲三区| 视频一区二区三区在线| 国产日韩欧美电影| 欧美一级电影网站| 欧美四级电影在线观看| 国产成人在线看| 久久国产精品99久久人人澡| 一区二区三区四区五区视频在线观看 | 亚洲国产日韩av| 国产精品素人视频| 日韩美女天天操| 欧美日韩国产经典色站一区二区三区| 成人天堂资源www在线| 国产在线视视频有精品| 日韩av一区二区在线影视| 亚洲情趣在线观看| 国产嫩草影院久久久久| 精品国产凹凸成av人网站| 欧美日韩成人高清| 欧美亚洲图片小说| 在线亚洲一区二区| 91视频www| 91麻豆国产香蕉久久精品| 成人午夜激情片| 国产精品一区二区在线播放| 国模娜娜一区二区三区| 久久99国产乱子伦精品免费| 秋霞影院一区二区| 蜜臀av性久久久久蜜臀aⅴ | 精品少妇一区二区三区在线播放| 欧美夫妻性生活| 67194成人在线观看| 欧美日韩午夜在线| 欧美日韩高清不卡| 91国产免费观看| 国产91丝袜在线播放| 国产一区二区在线观看免费| 麻豆91在线播放免费| 麻豆91在线播放| 日本不卡免费在线视频| 日韩福利视频导航| 美女网站色91| 国产一区二区女| 丰满少妇久久久久久久| 成人h动漫精品一区二区| 91亚洲精品久久久蜜桃网站 | 91理论电影在线观看| 色综合久久88色综合天天免费| 色综合天天综合狠狠| 日本二三区不卡| 欧美军同video69gay| 日韩美女一区二区三区四区| 国产亚洲午夜高清国产拍精品| 欧美激情艳妇裸体舞| 亚洲欧美日韩综合aⅴ视频| 亚洲黄色小说网站| 日韩中文欧美在线| 国产一区 二区| 91蜜桃网址入口| 欧美一区二区免费观在线| 久久婷婷国产综合精品青草| 国产精品乱人伦| 亚洲成人午夜电影| 美女精品一区二区| 成人国产视频在线观看| 在线精品视频小说1| 欧美电影免费观看高清完整版| 久久精品视频一区| 亚洲色图在线视频| 日韩精品免费专区| 高清久久久久久| 欧美肥妇bbw| 欧美激情一区在线观看| 国产高清不卡二三区| 99re热这里只有精品免费视频| 欧美日韩亚州综合| 国产日韩视频一区二区三区| 一区二区三区四区视频精品免费| 六月婷婷色综合| av不卡在线观看| 日韩美一区二区三区| 亚洲欧美日韩国产综合在线 | 在线视频国产一区| 欧美mv日韩mv国产网站| 一区二区三区 在线观看视频| 久88久久88久久久| 欧美午夜不卡在线观看免费| 国产日韩精品一区二区浪潮av| 亚洲国产另类av| 成人免费观看男女羞羞视频| 91精品国产欧美日韩| 国产精品国产自产拍在线| 久久成人免费网站| 欧美主播一区二区三区美女| 亚洲国产精品成人综合色在线婷婷| 午夜欧美大尺度福利影院在线看| 成人h版在线观看| 久久欧美一区二区| 日韩电影在线观看网站| 日本二三区不卡| 国产精品美女一区二区在线观看| 免费观看91视频大全| 欧美午夜在线观看| 国产精品传媒在线| 国产成人自拍在线| 日韩三级在线观看| 亚洲成人精品影院| 在线影院国内精品| 国产精品每日更新| 国产精品 日产精品 欧美精品| 欧美一区二区视频在线观看2022| 亚洲午夜私人影院| 色哟哟日韩精品| 亚洲美女视频在线| av成人免费在线观看| 欧美激情一区二区三区| 国产精品18久久久久| www国产成人免费观看视频 深夜成人网 | 欧美精品一区二区三区一线天视频 | 亚洲国产精品一区二区www在线| 成人美女视频在线观看18| 国产亚洲欧美日韩日本| 黄页视频在线91| 337p日本欧洲亚洲大胆精品| 久久99久久久久久久久久久| 日韩一区二区影院| 蜜臀久久99精品久久久久久9| 欧美日韩免费在线视频| 亚洲成人综合视频| 欧美理论片在线| 日本不卡在线视频| 欧美一区二区视频免费观看| 秋霞午夜鲁丝一区二区老狼| 91精品国产品国语在线不卡| 麻豆一区二区三| 久久嫩草精品久久久精品一| 国产成人一区在线| 国产精品丝袜一区| 91色porny| 亚洲一区二区三区在线播放| 欧美日韩久久一区二区| 日韩中文字幕不卡| 精品国产不卡一区二区三区| 福利一区在线观看| 亚洲欧洲性图库| 欧美体内she精高潮| 日产欧产美韩系列久久99| 精品日产卡一卡二卡麻豆| 国产一区二区在线视频| 国产精品嫩草99a| 欧美亚洲国产一区二区三区va| 亚洲色图欧美激情| 欧美精品一二三区| 国产精品一区二区久久精品爱涩 | 51久久夜色精品国产麻豆| 久久99精品久久久久久| 欧美激情综合在线| 欧美在线免费播放| 久久国产精品色婷婷| 欧美激情一二三区| 欧美日韩免费电影| 精品午夜一区二区三区在线观看| 国产精品人人做人人爽人人添 | 日韩免费性生活视频播放| 国产成人免费在线视频| 亚洲精品少妇30p| 7777女厕盗摄久久久| 国产白丝精品91爽爽久久| 一区二区三区不卡视频| 7777精品伊人久久久大香线蕉的 | 久久蜜桃av一区精品变态类天堂| 高清在线不卡av| 日韩一区二区三区观看| 香港成人在线视频| 精品国产伦一区二区三区观看体验 | 2017欧美狠狠色| 亚洲女同ⅹxx女同tv| 在线欧美日韩精品| 日韩欧美国产综合一区| 国产校园另类小说区| 亚洲一区免费观看| 67194成人在线观看| 日韩欧美你懂的| 色呦呦国产精品| 国产在线播放一区| 夜夜亚洲天天久久| 久久九九国产精品| 欧美电影一区二区三区| 99精品视频在线观看| 精品一区二区久久| 一区二区成人在线| 亚洲国产激情av| 26uuu国产在线精品一区二区| 欧美亚洲愉拍一区二区| a亚洲天堂av| 国产精品一区二区在线播放| 日韩久久精品一区|