天天看点

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;

}

//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)

dwCapBufSize = placAddressCaps->dwNeededSize;

//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;

} // End if ()

FuncExit:

lineShutdown(hLineApp);

return hr;

     本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/818958,如需转载请自行联系原作者