2012-02-15 19 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

.NETからTAPI3.dllをCOM interop経由で直接使用することはできません。あなたはランダムな問題にぶつかるでしょう。サードパーティのラッパーを使用します。私の答えはこちらをご覧ください:http://stackoverflow.com/a/2334053/44522また、TAPIドライバがDTMFをサポートしていない可能性もあります。 – MicSim

+0

素早く応答してくれてありがとう、あなたはそのC++コードのいくつかのサンプルを持っていますか? – Tyrril

+0

いいえ、申し訳ありませんが、ダウンロードパッケージ自体にサンプルが含まれていると思います。 – MicSim

答えて

0

は、.NET TAPIライブラリのATAPIライブラリを使用することができます。また、TAPIの仕組みを理解できるように、いくつかの例が含まれています。 ATAPIはCodePlexでホストされ、MITのライセンスを受けています。ライブラリを入手するには、GoogleのATAPI codeplexを検索してください。

関連する問題