2014-06-19 2 views
1

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"); 
    } 
} 
+2

예외가 발생한 행은 무엇입니까? 하단 라인 번호 –

+0

. 07, ici.ReleaseUserUserInfo(); –

+0

ici 객체에서 ITCallInfo :: GetCallInfoBuffer() 메서드를 어디서든 호출하고 있습니까? –

답변

0

내가 오류 코드가 생기고 있다는 것을 믿는다 g는 실제로 TAPI_E_NOTSUPPORTED입니다!

ReleaseUserUserInfo 방법은, 애플리케이션이 ITCallInfo :: GetCallInfoBuffer 방법에 의한 사용자의 사용자 정보를 처리 한 서비스 제공자에 통지의 CIB_USERUSERINFO 부재 요청 : ITCallInfo::ReleaseUserUserInfo 대한 MSDN 문서에 따라

CALLINFO_BUFFER 및 이후 수신 된 사용자 - 사용자 정보를 작성할 수 있습니다.

Hwoever, User-user information은 ISDN Q.931 표준에 고유하며 모든 서비스 공급자가이를 지원하지는 않습니다.

특히 클라이언트와 원격 장치간에이 정보를 교환하고 싶지 않은 경우 문제가되는 코드 줄을 삭제하는 것으로 충분합니다. 코드 줄을 사용하지 않거나 지원되지 않는 경우 모두 삭제하면됩니다.