zoukankan      html  css  js  c++  java
  • Getphonenumber获得*的例子

    今天运行了一下SDK的 Getphonenumber的例子,没在真机上测试

    /////////////////////////////////////////////////////////////////////////////
    // Function: SHGetPhoneNumber
    // szNumber - Out Buffer for the phone number
    // cchNumber - size of sznumber in characters
    // nLineNumber - In which phone line (1 or 2) to get the number for
    /////////////////////////////////////////////////////////////////////////////
    HRESULT SHGetPhoneNumber(LPTSTR szNumber, UINT cchNumber, UINT nLineNumber)
    {
        HRESULT  hr = E_FAIL;
        LRESULT  lResult = 0;
        HLINEAPP hLineApp;
        DWORD    dwNumDevs;  //number of line devices
        DWORD    dwAPIVersion = TAPI_API_HIGH_VERSION;
        LINEINITIALIZEEXPARAMS liep;

        DWORD dwTAPILineDeviceID;
        const DWORD dwAddressID = nLineNumber - 1;

        liep.dwTotalSize = sizeof(liep);
        liep.dwOptions   = LINEINITIALIZEEXOPTION_USEEVENT;

        //initialize line before accessing
        if (SUCCEEDED(lineInitializeEx(&hLineApp, 0, 0, TEXT("ExTapi_Lib"), &dwNumDevs, &dwAPIVersion, &liep)))
        {

            BYTE* pCapBuf = NULL;
            DWORD dwCapBufSize = CAPS_BUFFER_SIZE;
            LINEEXTENSIONID  LineExtensionID;
            LINEDEVCAPS*     pLineDevCaps = NULL;
            LINEADDRESSCAPS* placAddressCaps = NULL;

            pCapBuf = new BYTE[dwCapBufSize];
            EXIT_ON_NULL(pCapBuf);

            pLineDevCaps = (LINEDEVCAPS*)pCapBuf;
            pLineDevCaps->dwTotalSize = dwCapBufSize;

            // Get TSP Line Device ID
            dwTAPILineDeviceID = 0xffffffff;
            for (DWORD dwCurrentDevID = 0 ; dwCurrentDevID < dwNumDevs ; dwCurrentDevID++)
            {
                //ensure TAPI, service provider, and application are all using the same versions
                if (0 == lineNegotiateAPIVersion(hLineApp, dwCurrentDevID, TAPI_API_LOW_VERSION, TAPI_API_HIGH_VERSION,
                    &dwAPIVersion, &LineExtensionID))
                {
                    lResult = lineGetDevCaps(hLineApp, dwCurrentDevID, dwAPIVersion, 0, pLineDevCaps);

                    //increase buffer size if too small to hold the device capabilities
                    if (dwCapBufSize < pLineDevCaps->dwNeededSize)
                    {
                        delete[] pCapBuf;
                        dwCapBufSize = pLineDevCaps->dwNeededSize;
                        pCapBuf = new BYTE[dwCapBufSize];
                        EXIT_ON_NULL(pCapBuf);

                        pLineDevCaps = (LINEDEVCAPS*)pCapBuf;
                        pLineDevCaps->dwTotalSize = dwCapBufSize;

                        lResult = lineGetDevCaps(hLineApp, dwCurrentDevID, dwAPIVersion, 0, pLineDevCaps);
                    }
                    //lResult of 0 means the device capabilities were successfully returned
                    if ((0 == lResult) &&
                        (0 == _tcscmp((TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->dwLineNameOffset), CELLTSP_LINENAME_STRING)))
                    {
                        dwTAPILineDeviceID = dwCurrentDevID;
                        break;
                    }
                }
            }

            placAddressCaps = (LINEADDRESSCAPS*)pCapBuf;
            placAddressCaps->dwTotalSize = dwCapBufSize;

            lResult = lineGetAddressCaps(hLineApp, dwTAPILineDeviceID, dwAddressID, dwAPIVersion, 0, placAddressCaps);

            //increase buffer size if too small to hold the address capabilities
            if (dwCapBufSize < placAddressCaps->dwNeededSize)
            {
                delete[] pCapBuf;
                dwCapBufSize = placAddressCaps->dwNeededSize;
                pCapBuf = new BYTE[dwCapBufSize];
                EXIT_ON_NULL(pCapBuf);

                placAddressCaps = (LINEADDRESSCAPS*)pCapBuf;
                placAddressCaps->dwTotalSize = dwCapBufSize;

                lResult = lineGetAddressCaps(hLineApp, dwTAPILineDeviceID, dwAddressID, dwAPIVersion, 0, placAddressCaps);
            }
            //lResult of 0 means the address capabilities were successfully returned
            if (0 == lResult)
            {
                if (szNumber)
                {
                    szNumber[0] = TEXT('/0');

                    EXIT_ON_FALSE(0 != placAddressCaps->dwAddressSize);

                    // A non-zero dwAddressSize means a phone number was found
                    ASSERT(0 != placAddressCaps->dwAddressOffset);
                    PWCHAR tsAddress = (WCHAR*)(((BYTE*)placAddressCaps)+placAddressCaps->dwAddressOffset);

                    StringCchCopy(szNumber, cchNumber, tsAddress);
                }

                hr = S_OK;
            }

            delete[] pCapBuf;
        } // End if ()

    FuncExit:
        lineShutdown(hLineApp);

        return hr;
    }

  • 相关阅读:
    Vue-基础(四)
    Vue-基础(三)
    Vue-基础(一)
    Vue-基础(二)
    CSS-初始化模板2(common.css)
    CSS-初始化模板1(normalize.css)
    CSS预处理器-Less
    MySQL视窗函数row_number(), rank(), denser_rank()
    LeetCode第4题:寻找两个有序数组的中位数
    无重复字符的最长子串
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168434.html
Copyright © 2011-2022 走看看