アーキテクチャ (テレフォニー API)

次の図は、テレフォニー サービス プロバイダーとそれに関連付けられているユーザー インターフェイスダイナミック リンク ライブラリ (UI DLL) の一般的なアーキテクチャを示しています。

tsps および関連する ui dll

サービス プロバイダーは、少なくとも 2 つのコンポーネントで構成されます。 サービス プロバイダー DLL (図では MAIN として指定されています)。TSP) は TAPISRV プロセスのコンテキストで実行され、デバイスの特定のアプリケーションの使用に関連付けられているユーザー インターフェイス要素に関連しないサービス プロバイダーのすべてのタスクを実行します (ほとんどの場合、図に示されていない下位レベルのコンポーネントと組み合わせて)。 ただし、ユーザー インターフェイス コードがサービス プロバイダーに統合された以前のバージョンの TAPI とは異なり (以前のアーキテクチャのため、アプリケーションのコンテキスト内で実行)、サービス プロバイダーには、ユーザー インターフェイス要素を実装する別のコンポーネントを含める必要があります。

サービス プロバイダー UI DLL は、アプリケーションが UI を生成する TAPI 関数 (TUISPI_lineConfigDialogTUISPI_lineConfigDialogEditTUISPI_phoneConfigDialogTUISPI_providerConfigTUISPI_providerInstallTUISPI_providerRemove) を呼び出すときに TAPI によって呼び出される関数をエクスポートする必要があります。 これらの各関数には、TUISPIDLLCALLBACK型の TAPI のコールバック関数へのポインターがパラメーターとして含まれています。これは、UI DLL が TAPISRV プロセスで実行されているサービス プロバイダー DLL と双方向 (送受信データの両方) を通信するために使用できます。 サービス プロバイダーが、Ui が予期されない TSPI 関数 (たとえば、hwnd パラメーターを持たない関数) と組み合わせて、Unimodem Talk/Hangup ダイアログ ボックスなどの自然発生 UI を生成する場合、UI DLL は TUISPI_providerGenericDialogTUISPI_providerGenericDialogDataをエクスポートする必要があります。

手記

元の TSPI UI 生成関数 (TSPI_lineConfigDialogTSPI_lineConfigDialogEditTSPI_phoneConfigDialogTSPI_providerConfigTSPI_providerInstallTSPI_providerRemove) は古く、TAPI によって呼び出されることはありません。 したがって、これらはサービス プロバイダー DLL によってエクスポートされる必要はありません。 ただし、サービス プロバイダーをテレフォニー コントロール パネル (バージョン 1.4 以前の Windows テレフォニーで提供されているユーティリティ) で追加できるサービス プロバイダーとして一覧表示する場合は、TSPI_providerInstallエクスポートする必要があります。テレフォニーコントロールパネルで 削除 ボタンを選択したときに有効にする場合は、TSPI_providerRemoveエクスポートする必要があります。選択時にテレフォニーコントロールパネルで セットアップ ボタンを有効にする場合は、TSPI_providerConfigエクスポートする必要があります。 テレフォニー コントロール パネルは、サービス プロバイダーの TSP ファイルにこれらの機能が存在することを確認し、実行できる操作を反映するようにユーザー インターフェイスを調整します。

 

サービス プロバイダー DLL は、TAPISRV プロセスがアプリケーション プロセスに読み込む UI DLL の名前を取得するために使用する TSPI_providerUIIdentify 関数をエクスポートする必要があります。 データを表示するために UI DLL からの要求を受信して応答するには、TSPI_providerGenericDialogData 関数をエクスポートする必要があります。また、ユーザーに UI を提示すると定義されていない関数と組み合わせて、自然発生 UI を生成するために確立された関連付けを解放するタイミングをサービス プロバイダーに伝えるために、TAPISRV プロセスの TSPI_providerFreeDialogInstance をエクスポートする必要があります。 サービス プロバイダー DLL は、新しい TSPI メッセージ LINE_SENDDIALOGINSTANCEDATAを使用して UI DLL にデータを一方向に送信できます。

TSPI 関数と TUISPI 関数の名前は意図的に異なって定義されているため、必要に応じて、サービス プロバイダー DLL と UI DLL を同じ DLL ファイルにすることができます。 適切なセグメント化を使用すると、アプリケーション コンテキストでメモリが不必要に使用されるとは限らず、現在 1 つの DLL に実装できるサービス プロバイダーのインストール プロセスを簡略化できます。 TAPI は、DLL が使用されているコンテキストに適した関数のみを呼び出します。

テレフォニー サービス プロバイダーと UI DLL は両方とも、複数のアプリケーション プロセスから同時に UI 関数を呼び出すことができることを念頭に置いて設計する必要があります。 また、テレフォニー サービス プロバイダーが実行しているアプリケーションと TAPI サービスが、LAN 上の別のコンピューター上にあることも考慮する必要があります。