ITTAPI
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ITTAPI インターフェイスは、TAPI オブジェクトの基本インターフェイスです。TAPI オブジェクトは CoCreateInstance によって作成されます。CoCreateInstance の詳細については、COM のドキュメントを参照してください。その他のすべての TAPI 3 オブジェクトは、TAPI 3 自体によって作成されます。
メソッド 16
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
Initialize メソッドは TAPI を初期化します。このメソッドは、他の TAPI 3 メソッドを呼び出す前に呼び出す必要があります。アプリケーションは、TAPI セッションを終了するときに Shutdown メソッドを呼び出す必要があります。
戻り値
このメソッドは次の値のいずれかを返します。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| TAPI は既に初期化されています。 | |
| 操作を実行するのに十分なメモリがありません。 |
Shutdown メソッドは TAPI セッションをシャットダウンします。
戻り値
このメソッドは次の値のいずれかを返します。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| TAPI セッションは既にシャットダウンされています。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
Shutdown が失敗する理由の 1 つは、事前に Initialize が正常に呼び出されていなかった場合です。
get_Addresses メソッドは、現在利用可能なアドレスのコレクションを作成します。Visual Basic で記述されたものなど、オートメーションクライアントアプリケーション向けに提供されています。C および C++ アプリケーションは EnumerateAddresses メソッドを使用する必要があります。
| pVariant | VARIANT* | out | ITAddress インターフェイスポインター(アドレスオブジェクト)の ITCollection を格納する VARIANT へのポインター。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| pVariant パラメーターが無効です。 | |
| 操作を実行するのに十分なメモリがありません。 | |
| pVariant パラメーターが有効なポインターではありません。 |
解説(Remarks)
TAPI は、ITTAPI::get_Addesses によって返される ITAddress インターフェイスに対して Addref メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために、 ITAddress インターフェイスに対して Release を呼び出す必要があります。
EnumerateAddresses メソッドは、現在利用可能なアドレスを列挙します。C および C++ アプリケーション向けに提供されています。Visual Basic で記述されたものなど、オートメーションクライアントアプリケーションは get_Addresses メソッドを使用する必要があります。
| ppEnumAddress | IEnumAddress** | out | IEnumAddress インターフェイスへのポインター。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| ppEnumAddress パラメーターが有効なポインターではありません。 | |
| TAPI オブジェクトが初期化されていません。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
アプリケーションは通常、この列挙を使用して各アドレスの機能を確認し、現在の目的に有用なものを判断します。
想定していたアドレスが見つからない場合は、適切なサービスプロバイダーがインストールされていないか、正しく動作していない可能性があります。
TAPI は、ITTAPI::EnumerateAddresses によって返される IEnumAddress インターフェイスに対して Addref メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために、 IEnumAddress インターフェイスに対して Release メソッドを呼び出す必要があります。
TAPI セッション中にアドレスが作成または削除された場合、アプリケーションは ITTAPIEventNotification インターフェイスを通じて通知されます。プラグアンドプレイデバイスのインストールなどによってアドレスが作成された場合、 ITTAPIEventNotification::Event は TAPIOBJECT_EVENT 列挙型の TE_ADDRESSCREATE メンバーを返します。アドレスが削除された場合、ITTAPIEventNotification::Event は TE_ADDRESSREMOVE を返します。これらのイベントの後に EnumerateAddresses を呼び出すと、現在のアドレスが反映されます。
RegisterCallNotifications メソッドは、アプリケーションが受信する新しい通話通知を設定します。アプリケーションは、処理できるメディアタイプを示し、要求する権限を指定して、アドレスごとにこのメソッドを呼び出す必要があります。
| pAddress | ITAddress* | in | ITAddress インターフェイスへのポインター。 |
| fMonitor | VARIANT_BOOL | in | アプリケーションが通話を監視するかどうかを示すブール値。VARIANT_TRUE はアプリケーションが通話を監視することを示し、VARIANT_FALSE は監視しないことを示します。 |
| fOwner | VARIANT_BOOL | in | アプリケーションが着信通話を所有するかどうかを示すブール値。VARIANT_TRUE はアプリケーションが着信通話を所有することを示し、VARIANT_FALSE は所有しないことを示します。 |
| lMediaTypes | INT | in | アプリケーションが処理できる メディアタイプ。 |
| lCallbackInstance | INT | in | TAPI 3 DLL によって使用されるコールバックインスタンス。 ITTAPIEventNotification 送信インターフェイスの登録時に IConnectionPoint::Advise によって返される gulAdvise 値を指定できます。 |
| plRegister | INT* | out | 成功した場合に、 ITTAPI::UnregisterNotifications によって使用される戻り値。 |
戻り値
このメソッドは次の値のいずれかを返します。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| plRegister パラメーターが有効なポインターではありません。 | |
| TAPI オブジェクトが初期化されていません。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
このメソッドが 1 つのアドレスに対して複数回呼び出された場合、アプリケーションが既に監視している通話がそのアプリケーションにハンドオフされると、コールハブからの参加者通話に関する情報が混乱を招くことがあります。
RegisterCallNotifications メソッドは、指定されたメディアタイプの通話の監視、またはその所有権の受け取りに関心があるものとして、アプリケーションを登録します。これらの通話権限は fMonitor および fOwner パラメーターで設定されます。 アプリケーションは、複数のメディアタイプを処理するために複数のフラグを指定できます。複数のアプリケーションが同じアドレスおよびメディアタイプに対して登録すると、競合が発生する可能性があります。これらの競合は、ユーザーがアプリケーションに相対的な優先順位を割り当てる優先順位方式によって解決されます。ユーザーは ITTAPI::SetApplicationPriority 関数を呼び出すことで、アプリケーションの優先順位を設定できます。特定のメディアタイプに対して最も優先順位の高いアプリケーションのみが、そのメディアタイプの通話の所有権を(要求せずに)受け取ります。所有権は、着信通話が最初に到着したとき、または通話がハンドオフされたときに受け取ることができます。通話の所有権を別のアプリケーションにハンドオフするには、ITBasicCallControl::HandoffDirect および ITBasicCallControl::HandoffIndirect 関数が呼び出されます。ユーザーがアプリケーションに優先順位を割り当てず、複数のアプリケーションが同じ回線デバイスを開いた場合、既定では、最初に RegisterCallNotifications を呼び出したアプリケーションが最も高い優先順位を持ちます。
UnregisterNotifications メソッドは、ITTAPI::RegisterCallNotifications を使用して行われた着信通話通知の登録をすべて削除します。
| lRegister | INT | in | RegisterCallNotifications メソッドが plRegister パラメーターで返した値。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| TAPI オブジェクトがまだ初期化されていないか、lRegister パラメーターが無効です。 | |
| 操作を実行するのに十分なメモリがありません。 |
get_CallHubs メソッドは、現在利用可能なコールハブのコレクションを作成します。Visual Basic で記述されたものなど、オートメーションクライアントアプリケーション向けに提供されています。C および C++ アプリケーションは EnumerateCallHubs メソッドを使用する必要があります。
| pVariant | VARIANT* | out | ITCallHub インターフェイスポインター(CallHub オブジェクト)の ITCollection を格納する VARIANT へのポインター。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| pVariant パラメーターが無効です。 | |
| 操作を実行するのに十分なメモリがありません。 | |
| pVariant パラメーターが有効なポインターではありません。 |
解説(Remarks)
TAPI は、ITTAPI::get_CallHubs によって返される ITCallHub インターフェイスに対して Addref メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために、 ITCallHub インターフェイスに対して Release を呼び出す必要があります。
EnumerateCallHubs メソッドは、現在利用可能なコールハブを列挙します。C および C++ アプリケーション向けに提供されています。Visual Basic で記述されたものなど、オートメーションクライアントアプリケーションは get_Callhubs メソッドを使用する必要があります。
| ppEnumCallHub | IEnumCallHub** | out | IEnumCallHub インターフェイスへのポインター。 |
戻り値
このメソッドは次の値のいずれかを返します。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| ppEnumCallHub パラメーターが有効なポインターではありません。 | |
| TAPI オブジェクトが初期化されていません。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
TAPI は、ITTAPI::EnumerateCallHubs によって返される IEnumCallHub インターフェイスに対して Addref メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために、 IEnumCallHub インターフェイスに対して Release を呼び出す必要があります。
SetCallHubTracking メソッドは、CallHub トラッキングを有効または無効にします。
| pAddresses | VARIANT | in | ITAddress インターフェイスポインターの SAFEARRAY を格納する VARIANT へのポインター。 |
| bTracking | VARIANT_BOOL | in | トラッキングを有効にするには VARIANT_TRUE、無効にするには VARIANT_FALSE を指定します。 |
戻り値
このメソッドは次の値のいずれかを返します。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| TAPI オブジェクトが初期化されていません。 | |
| 操作を実行するのに十分なメモリがありません。 |
ITTAPI インターフェイスの EnumeratePrivateTAPIObjects メソッドは実装されておらず、E_NOTIMPL を返します。
| ppEnumUnknown | IEnumUnknown** | out | このメソッドは実装されていません。 |
戻り値
このメソッドは値を返しません。
ITTAPI インターフェイスの get_PrivateTAPIObjects メソッドは実装されておらず、E_NOTIMPL を返します。
| pVariant | VARIANT* | out | このメソッドは実装されていません。 |
戻り値
このメソッドは値を返しません。
RegisterRequestRecipient メソッドは、アシステッドテレフォニー要求を処理する適切なものとして、アプリケーションインスタンスを登録します。
| lRegistrationInstance | INT | in | 登録インスタンスへのポインター。 |
| lRequestMode | INT | in | 要求モード。 |
| fEnable | VARIANT_BOOL | in | VARIANT_TRUE は、呼び出し元がハンドラーとして登録することを示します。VARIANT_FALSE は、ハンドラーとしての登録を解除することを示します。 |
戻り値
このメソッドは次の値のいずれかを返します。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| TAPI オブジェクトが初期化されていません。 | |
| 操作を実行するのに十分なメモリがありません。 |
SetAssistedTelephonyPriority メソッドは、アシステッドテレフォニー要求を処理するアプリケーションの優先順位を設定します。
| pAppFilename | LPWSTR | in | アプリケーションの名前を格納する BSTR へのポインター。 |
| fPriority | VARIANT_BOOL | in | 無効にするには VARIANT_FALSE、有効にするには VARIANT_TRUE を設定します。 |
戻り値
このメソッドは次の値のいずれかを返します。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
アプリケーションは、pAppFilename パラメーターのメモリを割り当てるために SysAllocString を使用し、変数が不要になったときにそのメモリを解放するために SysFreeString を使用する必要があります。
SetApplicationPriority メソッドを使用すると、アプリケーションは特定のメディアタイプまたはアシステッドテレフォニー要求モードのハンドオフ優先順位リスト内で自身の優先順位を設定したり、優先順位リストから自身を削除したりできます。
| pAppFilename | LPWSTR | in | アプリケーションの名前を格納する BSTR へのポインター。 |
| lMediaType | INT | in | アプリケーションに関連付けられたメディア。 |
| fPriority | VARIANT_BOOL | in | アプリケーションの新しい優先順位。VARIANT_FALSE の値が渡された場合、アプリケーションは指定されたメディアまたは要求モードの優先順位リストから削除されます(既に存在しなかった場合でも、エラーは生成されません)。VARIANT_TRUE の値が渡された場合、アプリケーションはそのメディアまたは要求モードで最も優先順位の高いアプリケーションとして挿入されます(既にリスト内にあった場合は、より低い優先順位の位置から削除されます)。 |
戻り値
このメソッドは次の値のいずれかを返します。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
アプリケーションは、pAppFilename パラメーターのメモリを割り当てるために SysAllocString を使用し、変数が不要になったときにそのメモリを解放するために SysFreeString を使用する必要があります。
SetApplicationPriority で設定された優先順位は、システムの再起動や tapisrv の再起動をまたいで保持されます。ITTAPI::RegisterCallNotifications 関数は、通話の優先順位を指定せずに回線を開きます。既定では、最も優先順位の高いアプリケーションは、最初に ITTAPI::RegisterCallNotifications を呼び出したものになります。
put_EventFilter メソッドは、イベントフィルターマスクを設定します。このマスクは、TAPI_EVENT 列挙型のメンバーを OR 演算で連結したものです。
| lFilterMask | INT | in | イベントフィルターマスク。 |
戻り値
このメソッドは次の値のいずれかを返します。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 操作を実行するのに十分なメモリがありません。 |
get_EventFilter メソッドは、現在のイベントフィルターマスクを取得します。このマスクは、TAPI_EVENT 列挙型のメンバーを OR 演算で連結したものです。
| plFilterMask | INT* | out | イベントフィルターマスクへのポインター。 |
戻り値
このメソッドは次の値のいずれかを返します。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 操作を実行するのに十分なメモリがありません。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITTAPI "{B1EFC382-9355-11D0-835C-00AA003CCABD}" #usecom global ITTAPI IID_ITTAPI "{}" #comfunc global ITTAPI_Initialize 7 #comfunc global ITTAPI_Shutdown 8 #comfunc global ITTAPI_get_Addresses 9 var #comfunc global ITTAPI_EnumerateAddresses 10 sptr #comfunc global ITTAPI_RegisterCallNotifications 11 sptr,int,int,int,int,var #comfunc global ITTAPI_UnregisterNotifications 12 int #comfunc global ITTAPI_get_CallHubs 13 var #comfunc global ITTAPI_EnumerateCallHubs 14 sptr #comfunc global ITTAPI_SetCallHubTracking 15 int,int #comfunc global ITTAPI_EnumeratePrivateTAPIObjects 16 sptr #comfunc global ITTAPI_get_PrivateTAPIObjects 17 var #comfunc global ITTAPI_RegisterRequestRecipient 18 int,int,int #comfunc global ITTAPI_SetAssistedTelephonyPriority 19 wstr,int #comfunc global ITTAPI_SetApplicationPriority 20 wstr,int,int #comfunc global ITTAPI_put_EventFilter 21 int #comfunc global ITTAPI_get_EventFilter 22 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ITTAPI "{B1EFC382-9355-11D0-835C-00AA003CCABD}" #usecom global ITTAPI IID_ITTAPI "{}" #comfunc global ITTAPI_Initialize 7 #comfunc global ITTAPI_Shutdown 8 #comfunc global ITTAPI_get_Addresses 9 sptr #comfunc global ITTAPI_EnumerateAddresses 10 sptr #comfunc global ITTAPI_RegisterCallNotifications 11 sptr,int,int,int,int,sptr #comfunc global ITTAPI_UnregisterNotifications 12 int #comfunc global ITTAPI_get_CallHubs 13 sptr #comfunc global ITTAPI_EnumerateCallHubs 14 sptr #comfunc global ITTAPI_SetCallHubTracking 15 int,int #comfunc global ITTAPI_EnumeratePrivateTAPIObjects 16 sptr #comfunc global ITTAPI_get_PrivateTAPIObjects 17 sptr #comfunc global ITTAPI_RegisterRequestRecipient 18 int,int,int #comfunc global ITTAPI_SetAssistedTelephonyPriority 19 wstr,int #comfunc global ITTAPI_SetApplicationPriority 20 wstr,int,int #comfunc global ITTAPI_put_EventFilter 21 int #comfunc global ITTAPI_get_EventFilter 22 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。