2012-02-15 2 views
3

모뎀 연결을 만들고 그 후에 dtmf 신호를 보내는 응용 프로그램을 작성하려고합니다. 내 응용 프로그램이 전화를 걸지 만 DTMF 신호를 보내지 않습니다.TAPI 응용 프로그램에서 DTMF 신호를 보낼 수 없습니다.

TAPI를 사용하여 C#으로 쓰고 있습니다.

해당 코드에서 무엇이 잘못 되었습니까 ?? 버튼 3에서 DTMF 기능을 볼 수 있습니다.

내 응용 프로그램 :

using System; 
using System.Collections.Generic; 
using System.Drawing; 
using System.Windows.Forms; 

using TAPI3Lib; 

namespace dialer 
{ 

    public partial class MainForm : Form 
    { 
     private TAPIClass tapi; 
     private ITAddress[] adresy = new ITAddress[10]; 
     private ITBasicCallControl polaczenie = null; 
     private int wybrany = -1; 

     public MainForm() 
     { 
      InitializeComponent(); 
      ZainicjalizujTAPI(); 
     } 

     private void ZainicjalizujTAPI() 
     { 
      try 
      { 

       tapi = new TAPIClass(); 
       tapi.Initialize(); 


       IEnumAddress ea = tapi.EnumerateAddresses(); 
       ITAddress adres; 
       uint arg = 0; 

       for(uint i = 0; i < 10; ++i) 
       { 
        ea.Next(1, out adres, ref arg); 
        if(adres == null) break; 
        adresy[i] = adres; 
        listaLinii.Items.Add(adres.AddressName); 
       } 
      } 
      catch(Exception wyj) 
      { 

       MessageBox.Show(wyj.ToString(), "Błąd!"); 
      } 
     } 


     void Button1Click(object sender, EventArgs e) 
     { 
      if(listaLinii.SelectedIndex < 0) 
      { 
       MessageBox.Show("Nie wybrano linii", "Błąd!"); 
       return; 
      } 

      if(polaczenie != null) 
      { 
       MessageBox.Show("Połączenie już istnieje", "Błąd!"); 
       return; 
      } 

      wybrany = listaLinii.SelectedIndex; 

      try 
      { 
       polaczenie = adresy[wybrany].CreateCall("12345678", 
        TapiConstants.LINEADDRESSTYPE_PHONENUMBER, 
        TapiConstants.TAPIMEDIATYPE_DATAMODEM | TapiConstants.TAPIMEDIATYPE_AUDIO); 

       polaczenie.SetQOS(TapiConstants.TAPIMEDIATYPE_DATAMODEM | TapiConstants.TAPIMEDIATYPE_AUDIO, 
       QOS_SERVICE_LEVEL.QSL_BEST_EFFORT); 

       polaczenie.Connect(false); 
      } 
      catch(Exception wyj) 
      { 
       MessageBox.Show(wyj.ToString(), "Błąd!"); 
       polaczenie = null; 
      } 
     } 

     void Button2Click(object sender, EventArgs e) 
     { 
      if(polaczenie == null) return; 

      try 
      { 

       polaczenie.Disconnect(DISCONNECT_CODE.DC_NORMAL); 
       polaczenie = null; 
      } 
      catch(Exception wyj) 
      { 
       MessageBox.Show(wyj.ToString(), "Błąd!"); 
      } 
     } 

     // HERE is the button responsible for sending DTMF signal (doesn't work) 
     void Button3Click(object sender, EventArgs e) 
     { 
      if(polaczenie == null) return; 

      try 
      { 

       ITLegacyCallMediaControl2 cmc = (ITLegacyCallMediaControl2) polaczenie; 
       cmc.GenerateDigits("246", TapiConstants.LINEDIGITMODE_DTMF); 

      } 
      catch(Exception wyj) 
      { 
       MessageBox.Show(wyj.ToString(), "Błąd!"); 
      } 
     } 

     void ListaLiniiSelectedIndexChanged(object sender, EventArgs e) 
     { 

     } 
    } 
+0

COM interop를 통한 TAPI3.dll 직접 사용은 .NET에서 지원되지 않습니다. 임의의 문제가 발생할 것입니다. 타사 래퍼를 사용하십시오. 내 대답보기 : http://stackoverflow.com/a/2334053/44522. TAPI 드라이버가 DTMF를 지원하지 않을 수도 있습니다. – MicSim

+0

빠른 응답 주셔서 감사합니다, 그럼, 그 C + + 코드의 일부 샘플을 가지고? – Tyrril

+0

아니요, 죄송 합니다만 다운로드 패키지 자체에 일부 샘플이 포함되어 있다고 생각합니다. – MicSim

답변

0

당신은 닷넷 TAPI 라이브러리에 대한 ATAPI 라이브러리를 사용할 수 있습니다. 또한 TAPI 작동 방식을 이해할 수 있도록 예제가 포함되어 있습니다. ATAPI는 CodePlex에서 호스팅되며 MIT 라이선스가 있습니다. 라이브러리를 얻으려면 ATAPI 코드 플렉스에 대해 google을 검색하십시오.

관련 문제