TAPI监测不到来电,怎么办呀?
目标是用vc实现一个接电话,然后播放录音给对方,监测对方按键,根据选择播放下一段录音。
遇到第一个问题是监测不到是否有电话打进来了。
设备:
window2000server, vc6.0, smart 56k voice modem。
modem的line上接普通电话线,是内线电话,不知道和这个是不是有关系。
代码
BOOL Initialize()
{
DWORD dwDevNum = 0;
LINEEXTENSIONID lineExt;
lErrorCode = ::lineInitialize(&m_hLineApp,
::AfxGetApp()->m_hInstance,
lineCallbackFunc, "TapiModem", &dwDevNum);
if (lErrorCode < 0)
{
GetErrorString(lErrorCode);
return FALSE;
}
if (dwDevNum == 0)
return FALSE;
for (m_dwModemID = 0; m_dwModemID < dwDevNum; m_dwModemID++)
{
lErrorCode = ::lineNegotiateAPIVersion(m_hLineApp, m_dwModemID, TAPI_LOW_VERSION,
TAPI_CURRENT_VERSION, &m_dwAPIVersion, &lineExt);
if (lErrorCode < 0)
{
GetErrorString(lErrorCode);
return FALSE;
}
if (CheckLineCap(m_dwModemID, m_dwAPIVersion))
break;
}
if (m_dwModemID == dwDevNum)
return FALSE;
lErrorCode = ::lineOpen(m_hLineApp, m_dwModemID, &m_hLine,
m_dwAPIVersion, 0, 0,
LINECALLPRIVILEGE_MONITOR + LINECALLPRIVILEGE_OWNER,
LINEMEDIAMODE_DATAMODEM | LINEMEDIAMODE_AUTOMATEDVOICE |
LINEMEDIAMODE_INTERACTIVEVOICE | LINEMEDIAMODE_UNKNOWN
, NULL);
if (lErrorCode < 0)
{
GetErrorString(lErrorCode);
return FALSE;
}
lErrorCode = ::lineSetNumRings(m_hLine, 0, 0);
if (lErrorCode < 0)
{
GetErrorString(lErrorCode);
return FALSE;
}
return TRUE;
}
void CALLBACK lineCallbackFunc( DWORD dwDevice,
DWORD dwMessage,
DWORD dwCallbackInstance,
DWORD dwParam1,
DWORD dwParam2,
DWORD dwParam3 )
{
switch (dwMessage)
{
case LINE_CALLSTATE: // review the call state messages
{
m_hCall = (HCALL)dwDevice;
switch( dwParam1 )
{
case LINECALLSTATE_OFFERING:
{
//TapiStatus("新的呼叫...");
Answer();
}
break;
case LINECALLSTATE_IDLE:
{
TapiStatus("空闲...");
LONG lErrorCode = ::lineDeallocateCall(m_hCall);
if (lErrorCode < 0)
{
GetErrorString(lErrorCode);
}
m_hCall = NULL;
}
break;
case LINECALLSTATE_CONNECTED: // hey, we got through!
{
TapiStatus("Connected");
}
break;
case LINECALLSTATE_BUSY:
{
TapiStatus("线路正忙,关闭...");
HangupCall( );
}
break;
case LINECALLSTATE_DISCONNECTED:
{
TapiStatus("disconnected");
HangupCall( );
}
break;
}
break;
}
case LINE_MONITORDIGITS:
{
CString szDigit;
szDigit.Format("%c", dwParam1);
MessageBox(NULL, szDigit, "digit", MB_OK);
break;
}
} // switch
} // TapiCallBack()
如果收到offering消息, answer应该执行, 现在只写了一个messagebox在answer里边,提示来电话了。
我用别的电话拨这台电脑,可以听到电话接通,等待应答时的“嘟嘟"声。
开始modem的phone线接了电话,电话会响,后来把电话拔了。
不管怎样都可以听到电话接通,等待应答时的“嘟嘟"声,但是程序总是没有发现来电话了。
问题在哪里呀?监测不到电话,下边的工作就没有办法开始,帮忙呀, 分不够可以令开帖加
email: kittig@163.com