我正在使用C#和TAPI 3库为固定电话和全双工语音调制解调器开发软件。呼叫应答工作正常,但呼叫挂断正在抛出异常。我做了很多搜索以找到解决方案,但我做不到。以下是错误:
调用方法ici.ReleaseUserUserInfo(); {"此实现不提供建议(来自HRESULT的异常: 0x80040003(OLE_E_ADVISENOTSUPPORTED))"} System.Exception {System.Runtime.InteropServices.COMException}"
我的目标是保存录制的来电。一个有趣的事情是,如果在呼叫挂断之前关闭应用程序,它会成功保存录制的呼叫。
我的代码:
private void BtnAnswer_Click(object sender, EventArgs e)
{
IEnumCall ec = ia[line].EnumerateCalls();
uint arg = 0;
ITCallInfo ici;
ITTerminal recordTerminal;//NY test record
try
{
ec.Next(1, out ici, ref arg);
ITBasicCallControl2 bc = (TAPI3Lib.ITBasicCallControl2)ici;
recordTerminal = bc.RequestTerminal(TapiConstants.CLSID_String_FileRecordingTerminal,
TapiConstants.TAPIMEDIATYPE_MULTITRACK,
TAPI3Lib.TERMINAL_DIRECTION.TD_RENDER);
ITMediaControl mediacontrol = (ITMediaControl)recordTerminal;
ITMediaRecord mediarecord = (ITMediaRecord)recordTerminal;
mediarecord.FileName = "a.wav";
bc.SelectTerminalOnCall(recordTerminal);
bc.Answer();
mediacontrol.Start();
}
catch (Exception exp)
{
MessageBox.Show("There may not be any calls to answer! \n\n" + exp.ToString(), "TAPI3");
}
}
private void BtnHang_Click(object sender, EventArgs e)
{
IEnumCall ec = ia[line].EnumerateCalls();
uint arg = 0;
ITCallInfo ici;
try
{
ec.Next(1, out ici, ref arg);
ITBasicCallControl bc = (ITBasicCallControl)ici;
bc.Disconnect(DISCONNECT_CODE.DC_NORMAL);
ici.ReleaseUserUserInfo();
}
catch (Exception exp)
{
MessageBox.Show("No call to disconnect!", "TAPI3");
}
}
答案 0 :(得分:0)
我相信您看到的错误代码实际上是TAPI_E_NOTSUPPORTED!
根据ITCallInfo::ReleaseUserUserInfo的MSDN文档:
ReleaseUserUserInfo方法通知服务提供者应用程序已处理从ITCallInfo :: GetCallInfoBuffer方法获得的用户用户信息,该方法使用CALLINFO_BUFFER的CIB_USERUSERINFO成员调用,现在可以写入随后收到的用户用户信息。 / p>
但是,User-user information特定于ISDN Q.931标准,并非所有服务提供商都支持它。
除非您特别想在客户端和远程端之间交换此信息,否则只需删除有问题的代码行就足够了,因为否则它们都是未使用的和不受支持的。