求救!为什么在公司定制的6.0手机用TAPI打电话没声音啊

zkhraul 2009-03-05 02:21:49
为什么在公司定制的6.0手机用TAPI打电话没声音啊 ,这段测试代码在5.0是可以的
#include <windows.h>
#include <tapi.h>
#include <Extapi.h>

#define TAPI_API_LOW_VERSION 0x00020000
#define TAPI_API_HIGH_VERSION 0x00030000
/*******************************************************************
** 函数名: CloseLine
** 函数描述: 关闭电话线路
** 参数: 无
** 返回: 无
********************************************************************/
static void CloseLine()
{
LONG lRes;
if( g_CurrentLineInfo.hCurrentCall != NULL )//如果存在电话句柄
{
lRes = lineDrop( g_CurrentLineInfo.hCurrentCall, NULL, 0 );
lineDeallocateCall( g_CurrentLineInfo.hCurrentCall );//释放句柄
g_CurrentLineInfo.hCurrentCall = NULL;//设为NULL
}
if( g_CurrentLineInfo.hLine != NULL )//如果存在电话线路
{
lRes = lineClose(g_CurrentLineInfo.hLine);
lRes = lineShutdown(g_hLineApp);
g_CurrentLineInfo.hLine = NULL;
}
memset( (VOID*)&g_CurrentLineInfo, 0, sizeof(LINEINFO) );//重新初始当前线路信息
}
/*******************************************************************
** 函数名: SelectLine
** 函数描述: 选择合适的线路,获得可用的TAPI板本,并返回线路设备ID
** 参数: [in] hLineApp:电话线路应用实例
[in] dwNumberDevices: 线路设备数
[in] dwAPIVersionLow: 协商的最低版本号
[in] dwAPIVersionHigh :协商的最高版本号
[in] psTSPLineName:蜂窝线路名称
** 返回: 线路设备ID
********************************************************************/
static DWORD SelectLine(const HLINEAPP hLineApp,
const DWORD dwNumberDevices,
const DWORD dwAPIVersionLow,
const DWORD dwAPIVersionHigh,
const TCHAR* const psTSPLineName//蜂窝
)
{
BYTE* pLineDevCapsBytes;
DWORD dwCurrentDevID;
DWORD dwReturn = 0xffffffff;

for(dwCurrentDevID = 0 ; dwCurrentDevID < dwNumberDevices ;//从lineInitialize获得的线路设备数
dwCurrentDevID++)
{
DWORD dwAPIVersion;
LINEEXTENSIONID LineExtensionID ;
//协商板本号
if(0 == lineNegotiateAPIVersion(hLineApp, dwCurrentDevID,
dwAPIVersionLow, dwAPIVersionHigh,
&dwAPIVersion, &LineExtensionID))
{
LINEDEVCAPS LineDevCaps;
LineDevCaps.dwTotalSize = sizeof(LineDevCaps);

if(0 == lineGetDevCaps(hLineApp, dwCurrentDevID,
dwAPIVersion, 0, &LineDevCaps))
{
pLineDevCapsBytes = (BYTE*)malloc(sizeof(BYTE)*LineDevCaps.dwNeededSize);//new BYTE[LineDevCaps.dwNeededSize];

if(0 != pLineDevCapsBytes)
{
LINEDEVCAPS* pLineDevCaps = (LINEDEVCAPS*)pLineDevCapsBytes;
pLineDevCaps->dwTotalSize = LineDevCaps.dwNeededSize;
if(0 == lineGetDevCaps(hLineApp, dwCurrentDevID,
dwAPIVersion, 0, pLineDevCaps))
{
if(!(_tcscmp((_TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->dwLineNameOffset), psTSPLineName)))
{
g_CurrentLineInfo.dwAPIVersion = dwAPIVersion;//获得支持的TAPI版本号
dwReturn = dwCurrentDevID;//返回线路设备ID
}
}
free(pLineDevCapsBytes);
}
}
}
}
return dwReturn;
}
/*******************************************************************
** 函数名: MakePhoneCall
** 函数描述: 拔打指定号码
** 参数: [in] hCall:电话句柄
[in] lpszPhoneNum: 电话号码
[in] pnSize: 电话号码长度
** 返回: true: 呼叫成功
false:呼叫失败
********************************************************************/
static BOOLEAN MakePhoneCall(HCALL* hCall, LPCTSTR lpszPhoneNum, DWORD pnSize)
{
DWORD dwSizeOfTransOut = sizeof (LINETRANSLATEOUTPUT);
LPLINECALLPARAMS lpCallParams = NULL;
LPLINETRANSLATEOUTPUT lpTransOutput = NULL;

TCHAR szDialablePhoneNum[TAPIMAXDESTADDRESSSIZE + 1] = {'\0'};
g_MakeCallRequestID = 0;
//拔打电话
g_MakeCallRequestID = lineMakeCall(g_CurrentLineInfo.hLine,
&(*hCall), lpszPhoneNum, 0, lpCallParams);

g_hCheckedCall = *hCall;
g_CurrentLineInfo.hCurrentCall = *hCall;

if (g_MakeCallRequestID >= 0) //如果lineMakeCALL返回的是正数,则成功,并不允许当前线路可用
{
g_bCurrentLineAvail = FALSE;
}
else
{//关闭线路
goto exit;
}
return TRUE;
exit:
{
CloseLine();
return FALSE;
}
}

/*******************************************************************
** 函数名: InitializeTAPI
** 函数描述: 初始化TAPI
** 参数: 无
** 返回: 无
********************************************************************/
static DWORD InitializeTAPI ()
{
DWORD dwReturn = lineInitialize(&g_hLineApp,g_hInst,(LINECALLBACK) lineCallbackFunc,
szAppName,&g_dwNumDevs);
return dwReturn;
}
/*******************************************************************
** 函数名: InitCallLine
** 函数描述: 初始化电话线
** 参数: 无
** 返回: 无
********************************************************************/
static BOOLEAN InitCallLine()
{
DWORD lRes;
CloseLine();
lRes = InitializeTAPI ();//初始化TAPI,并获得设备线路数

g_dwMediaMode = LINEMEDIAMODE_INTERACTIVEVOICE |
LINEMEDIAMODE_DATAMODEM ;//媒体类型,传递给lineOpen使用
g_dwTAPIVer = 0x00020000;

//选择合适的线路,获得可用的TAPI板本,并返回线路设备ID
g_dwDevId = SelectLine(g_hLineApp,g_dwNumDevs,
TAPI_API_LOW_VERSION,
TAPI_API_HIGH_VERSION,
CELLTSP_LINENAME_STRING);

if(g_dwDevId == 0xffffffff)//无可用则关闭
{
lineShutdown(g_hLineApp);
return (FALSE);
}
//g_hLineApp已在Initialize里注册了,LINECALLPRIVILEGE_MONITOR表示应用程序只能打电话
lRes = lineOpen(g_hLineApp, g_dwDevId, &g_CurrentLineInfo.hLine, g_CurrentLineInfo.dwAPIVersion,
0x00000000, 1, LINECALLPRIVILEGE_MONITOR , g_dwMediaMode, NULL);

g_lResforcall = lRes;//将linopen返回的状态信息。。

if(lRes != 0)
{ //无法打开线路设备
lineShutdown(g_hLineApp);
return FALSE;
}
//设置优先级
lineSetAppPriority( szAppName, LINEMEDIAMODE_INTERACTIVEVOICE, NULL, 0, NULL, 1 );
return TRUE;
}
/*******************************************************************
** 函数名: CallingThreadProc
** 函数描述: 播打电话的线程函数
** 参数:
** 返回:
********************************************************************/
static DWORD CallingThreadProc(LPVOID pData) /*播打电话的线程回调函数*/
{
TCHAR szDialablePhoneNum[TAPIMAXDESTADDRESSSIZE + 1] = {'\0'};
DWORD dwTextLength = 0;
if( !InitCallLine() )
goto EXIT;

//拔打电话
_tcscpy( szDialablePhoneNum, g_szServerNum );
dwTextLength = _tcslen( g_szServerNum );

if( !MakePhoneCall(&g_CurrentLineInfo.hCurrentCall,
szDialablePhoneNum, dwTextLength * 2) )
{
goto EXIT;
}

if( g_CurrentLineInfo.hCurrentCall == NULL )
goto EXIT;
CloseHandle(m_hCallThread);
m_hCallThread = NULL;
return TRUE;

EXIT:
CloseLine();
CloseHandle(m_hCallThread);
m_hCallThread = NULL;
return 0;
}



...全文
116 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinezwq 2009-09-04
  • 打赏
  • 举报
回复
你的参数都不对么
zkhraul 2009-03-20
  • 打赏
  • 举报
回复
谁帮下我,我真的找不到原因了,不知道要不要找产家问问
zkhraul 2009-03-20
  • 打赏
  • 举报
回复
问了,说是他门手机是用非标准的,音频通道切换有问题,不能用SAMPLE里的方法
zkhraul 2009-03-09
  • 打赏
  • 举报
回复
哪位大哥用6.0的机试试啊,我只有一台啊
儿大不由爷 2009-03-05
  • 打赏
  • 举报
回复
换部手机试试

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧