今天运行了一下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;
}

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

Getphonenumber获得电话号码的例子相关推荐

  1. 微信小程序通过getphonenumber 获取电话号码无法获取code值

    问题: 小程序通过getphonenumber方法无法获取code值 原因:微信开发工具的基础库版本过低导致无法获取code值 处理方法 1.打开微信开发工具点击详情 2.将调式基础库修改值2.22. ...

  2. 正则表达式——验证手机号和电话号码

    在很多网页中总会涉及到输入手机号码或者电话号码,这个时候当然不能随便输入,需要一个验证来判断是否输入的正确手机号,而这个验证就是用到正则表达式来实现的,下面就来看看如何写一个验证手机号的正则表达式. ...

  3. 2.对于所有对象都通用的方法_EJ

    第8条: 覆盖equals时请遵守通用约定 我们在覆盖equals方法时,必须遵守它的通用约定: 1.自反性.对于任何非null的引用值x,x.equals(x)必须返回true: 2.对称性.对于任 ...

  4. (021) Linux之正则表达式

    十年运维系列之基础篇 - Linux 作者:曾林 联系:1494445739@qq.com 网站:www.jplatformx.com 版权:文章未经同意请勿转载 一.引言 简单地说,正则表达式是一种 ...

  5. java正则匹配英文句号_「正则表达式」王国奇遇记

    第一回 初来乍到 NPC: "欢迎来到正则表达式的国度,勇士!这里的每一个人都使用正则表达式,我是这里的 NPC,每一个来到这里的人都将由我代为介绍正则世界的规则,至于能领悟到何种境界,就看 ...

  6. 译注(3): NULL-计算机科学上最糟糕的失误

    原文:the worst mistake of computer science 注释:有些术语不知道怎么翻译,根据自己理解的意思翻译了,如有不妥,敬请提出:) 致谢: @vertextao @fra ...

  7. 可能是最好的正则表达式的教程笔记了吧...

    笔记是由油管的@The Coding Train老师发布系列教程. 因为正则我自己看了很多次,但是很快又忘记.所以为了彻底搞懂,一边学习一边记笔记,以给别人讲课的方式记笔记,我自己的印象会更深,所以就 ...

  8. NoSQL 一致性[详解]更新一致性

    原文:https://cloud.tencent.com/developer/article/1083703 翻译内容: NoSQL Distilled 第五章 Consistency 作者简介: 本 ...

  9. hadoop之MapReduce学习教程

    hadoop之MapReduce学习 MapReduce概述 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发"基于Hadoop的数据分析应用" ...

最新文章

  1. PV-RAFT:用于点云场景流估计的点体素相关场(CVPR2021)
  2. 东南大学成贤学院计算机报名,东南大学成贤学院2017年9月计算机等级考试报名办法...
  3. 数据查询语言(DQL)
  4. 从编解码算法到全链路RTC架构,揭秘淘系直播技术演进之路
  5. android theme 使用方法,Android入门之Style与Theme用法实例解析
  6. Java 高并发下的实践
  7. 关于maven打包成.exe
  8. Python的第三方库pillow
  9. 最大公约数GCD与最小公倍数LCM
  10. rsa 网站openssl加密解密 使用心得
  11. scala中的集合框架
  12. win10 office2007,excel2007,word2007等每次打开都要配置进度
  13. [转]《博客园精华集》ASP.NET分册第2论筛选结果文章列表
  14. 这么好用的两款文字转语音工具你知道吗?
  15. java graphics类详解_Java中Graphics2D类的使用操作解析
  16. python tokenize()_Python tokenize-rt包_程序模块 - PyPI - Python中文网
  17. 微积分“小糊涂”,难担大任
  18. 修改webbrower中浏览器版本
  19. c语言大学生自学网教学视频,6个质量最高的自学网站,悄悄的提成能力!
  20. OutputStreamWriter的基本使用

热门文章

  1. 网络安全统计显示XSS和过时的软件是主要问题
  2. Linux初级运维(一)——Linux操作系统及常用命令
  3. eclipse和maven
  4. 正则表达式及grep
  5. Scala学习--《Scala编程》
  6. 深入推荐引擎相关算法 - 协同过滤
  7. rand()和srand()产生伪随机数zz
  8. 闲谈: 测试报告的插入图片
  9. 什么是 “动态规划” , 用两个经典问题举例。
  10. Android 中 liblog 和 libcutils 的编译 trick