kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

忘れられたAPI:TAPI編

実はTAPIは完全には忘れられていなくて、今はエンタープライズ向けに用とをシフトしているようですが、ネタとしてはありかということで。正直、私も1.4時代のことまでしか知らないので、つっこみ歓迎。

TAPIとは

正式名称はTelephony Application Programming Interface。電話機器を統一的に扱う仕様として策定されました。現在はVer 3.1だそうです。

いつできたの?

最初に公開されたTAPIは1.3で、Windows 3.1および、Windows for Workgroups 3.11への再配布可能なアドオンとして公開されました。もちろん、16bit版のみをサポートしていたそうです。モデム、対応電話機器を統一的に扱おうとしてリリースされました。Windows 95の時代はほとんどモデムコントロールのために使われていました。今でもモデム(カード型PHSなども)を購入したらドライバを入れろと言う手順があるかと思いますが、ここでTAPI用のドライバを入れています。
TAPI 1.4がWindow 95に組み込まれる形で登場しています。ここで16bitのアプリケーションと32bitのアプリケーションの共存ができるようになりました。日本では1.4から使われ出したと記憶しています。
身近な使用例ではWindwosに付属しているハイパーターミナルやダイヤラ(XPにはもうないのかな?)があります。

TAPIの歴史と機能

Ver1.xは単にモデム/電話機との接続を提供するだけでした。日本で流通していたソフトも、多くはほとんどこの範囲で止まっているはず。
Ver2.0はWindows NT 4.0からサポートされました。このころから方針が変わって、いわゆるコールセンターとQoSのサポートが入り、大規模向けになっていきます。
Ver3.0はWindows 2000からサポートされました。3.1がXP/2003で、伝統的なAPI形式からCOMベースに変わりました。3.xでは従来の電話に加えて、IP電話のサポートも含まれるようになりました。
このように、Ver2.0以降は使う規模が拡大されていきましたが、その規模故かいわゆる一般プログラマが使うようなAPIではなくなってきました。
余談として、TAPI 1.5ってのもありましたが、Windows CE用に用意された、1.4のサブセットだそうです。

どうやって使うの?

仮にモデムをコントロールするソフトを作る場合、Ver2までのTAPIであれば、ライブラリはTAPI32.lib。ヘッダファイルはTAPI.hを使います。仮にあなたがTAPI Ver 3.0以降のプログラムを作ろうとした場合、TAPI3.hも使います。
そして、Ver1.4までの仕様でよい場合、ヘッダファイルの前に以下の定義を忘れないでください。

#define TAPI_CURRENT_VERSION 0x00010004
#include <tapi.h>

この定義がないと、Ver2のヘッダファイルも読み込みます。逆にVer2の仕様を使う場合は不要です。
TAPI2.2:http://msdn.microsoft.com/library/en-us/tapi/tapi2/tapi_2_2_start_page.asp
TAPI3.1:http://msdn.microsoft.com/library/en-us/tapi/tapi3/tapi_3_1_start_page.asp

みんな使っていたの?

私も使ったことあります(どうしてもわからないところがあり、超有名ソフト作者様に個人的に教えてもらいました(^^;)が、やはりモデムを扱う一部の通信ソフト作者くらいしかつかっていなかったのではないでしょうか。あくまでも、モデムを制御するために必要だったのであり*1、計測器やスキャナなどと接続して、RS-232Cのシリアル通信を行うためには不要であったためです。
実際、TAPIでモデムを制御できるとは言っても、通信処理そのものまではTAPIでは面倒を見てくれませんでした。

今も使える?

もちろん!ただし、今モデムで通信するケースもだいぶ少なくなりましたし、プログラムを作る必要があるか?ということではたぶんないでしょう。IP電話関係などはもちろん使わないでしょうし。MSDN Libraryによると、ILS Serverなどが必要みたいですし。ちょっとお手軽とはいえないですかね。
Live Communication ServerはTAPI 3.0をサポートしているのだろうか。

なぜ使われなくなったの?

Intenet時代へ移行して、電話回線で直結して〜ということがなくなったからですかね。もっとも、モデム経由でInternet接続を行っている場合、ダイヤルアップの接続時にWindowsが使っているはずなので、間接的な恩恵は受けていると思います。

*1:モデムの初期化のATコマンド、昔はめんどくさかったんですよ。特に強制的に9600bpsで通信させるとか、フロー制御とか