ITTerminalSupport
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ITTerminalSupport インターフェイスは、MSP が存在する場合にのみ Address オブジェクト上で公開されます。このインターフェイスのメソッドを使用すると、アプリケーションは利用可能なターミナルを検出したり作成したりでき、必要な Terminal オブジェクトへのポインターを取得できます。
メソッド 6
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
get_StaticTerminals メソッドは、現在利用可能な静的ターミナルのコレクションを作成します。
| pVariant | VARIANT* | out | VARIANT へのポインター。TAPI はこれに ITTerminal インターフェイスポインターの ITCollection を格納します。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| pVariant パラメーターが有効なポインターではありません。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
TAPI は、ITTerminalSupport::get_StaticTerminals が返す ITTerminal インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために、 ITTerminal インターフェイスに対して Release を呼び出す必要があります。
EnumerateStaticTerminals メソッドは、アドレスに関連付けられている現在利用可能な静的ターミナルを列挙します。
| ppTerminalEnumerator | IEnumTerminal** | out | IEnumTerminal 列挙子へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| ppTerminalEnumerator パラメーターが有効なポインターではありません。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
TAPI は、ITTerminalSupport::EnumerateStaticTerminals が返す IEnumTerminal インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために、 IEnumTerminal インターフェイスに対して Release を呼び出す必要があります。
get_DynamicTerminalClasses メソッドは、現在利用可能な動的ターミナルのコレクションを作成します。
| pVariant | VARIANT* | out | 文字列 (BSTR) 形式の ターミナルクラス の ITCollection を格納する VARIANT へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| 操作を実行するのに十分なメモリがありません。 | |
| pVariant パラメーターが有効なポインターではありません。 |
解説(Remarks)
アプリケーションは、 ITTerminalSupport::CreateTerminal の呼び出しで、このアドレスがどの動的ターミナルクラスをサポートしているかを調べるためにこのメソッドを呼び出します。
EnumerateDynamicTerminalClasses メソッドは、現在サポートされている利用可能な動的ターミナルクラスを列挙します。
| ppTerminalClassEnumerator | IEnumTerminalClass** | out | IEnumTerminalClass 列挙子へのポインター。TAPI はこれらのクラスを GUID として返します。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| ppTerminalClassEnumerator パラメーターが有効なポインターではありません。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
アプリケーションは、 ITTerminalSupport::CreateTerminal の呼び出しで、このアドレスがどの動的ターミナルクラスをサポートしているかを調べるためにこのメソッドを呼び出します。
TAPI は、ITTerminalSupport::EnumerateDynamicTerminalClasses が返す IEnumTerminalClass インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために、 IEnumTerminalClass インターフェイスに対して Release を呼び出す必要があります。
CreateTerminal メソッドは、動的ターミナルクラスとメディアに基づいて、新しい ITTerminal オブジェクトを作成して初期化します。ターミナルクラスは GUID によって識別されます。この GUID は、このメソッドに渡すために StringFromIID を使用して文字列に変換する必要があります。
| pTerminalClass | LPWSTR | in | 新しいターミナルオブジェクトの ターミナルクラス (GUID) を格納する BSTR へのポインター。 |
| lMediaType | INT | in | 新しいターミナルオブジェクトの メディアタイプ へのポインター。 |
| Direction | TERMINAL_DIRECTION | in | ターミナルの方向を示す TERMINAL_DIRECTION 記述子。 |
| ppTerminal | ITTerminal** | out | 作成された ITTerminal オブジェクトへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| pTerminalClass または lMediaType パラメーターが有効ではありません。 | |
| ppTerminal パラメーターが有効なポインターではありません。 | |
|
ITTerminal オブジェクトを作成するのに十分なメモリがありません。 |
|
|
lMediaType パラメーターが無効です。 |
| 動的ターミナルの作成はサポートされていません。 |
解説(Remarks)
アプリケーションは、pTerminalClass パラメーターのメモリを割り当てるために SysAllocString を使用し、その変数が不要になったときにメモリを解放するために SysFreeString を使用する必要があります。
ターミナルは一度作成されると、1 つのコールにのみ選択できます。
TAPI は、ITTerminalSupport::CreateTerminal が返す ITTerminal インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために、 ITTerminal インターフェイスに対して Release を呼び出す必要があります。
GetDefaultStaticTerminal メソッドは、指定されたメディアタイプの既定の静的ターミナルを取得します。
| lMediaType | INT | in | 必要なターミナルの メディアタイプ。 |
| Direction | TERMINAL_DIRECTION | in | ターミナルの方向を示す TERMINAL_DIRECTION 記述子。 |
| ppTerminal | ITTerminal** | out | ITTerminal インターフェイスへのポインター。利用可能なターミナルがない場合は NULL になります。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| 利用可能なターミナルがありません。*ppTerminal は NULL として返されます。 | |
| 不特定のエラーです。 | |
| lMediaType パラメーターが有効なポインターではありません。 | |
|
lMediaType パラメーターが有効なメディアタイプではありません。 |
| Terminal オブジェクトを作成するのに十分なメモリがありません。 |
解説(Remarks)
このメソッドは動的ターミナルを返しません。たとえば、メディアタイプが TAPIMEDIATYPE_VIDEO で、ターミナルの方向が TD_RENDER の場合は動的ターミナルを定義します。このメソッドはそれらのパラメーターでは失敗します。
このメソッドが返す既定の静的ターミナルは、 ITTerminalSupport::EnumerateStaticTerminals または ITTerminalSupport::get_StaticTerminals が返す静的ターミナルのいずれかです。通常、既定のターミナルは、コントロールパネルの「サウンドとマルチメディアのプロパティ」アプレットで「優先するデバイス」として選択されているものです。
TAPI は、ITTerminalSupport::GetDefaultStaticTerminal が返す ITTerminal インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために、 ITTerminal インターフェイスに対して Release を呼び出す必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITTerminalSupport "{B1EFC385-9355-11D0-835C-00AA003CCABD}" #usecom global ITTerminalSupport IID_ITTerminalSupport "{}" #comfunc global ITTerminalSupport_get_StaticTerminals 7 var #comfunc global ITTerminalSupport_EnumerateStaticTerminals 8 sptr #comfunc global ITTerminalSupport_get_DynamicTerminalClasses 9 var #comfunc global ITTerminalSupport_EnumerateDynamicTerminalClasses 10 sptr #comfunc global ITTerminalSupport_CreateTerminal 11 wstr,int,int,sptr #comfunc global ITTerminalSupport_GetDefaultStaticTerminal 12 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ITTerminalSupport "{B1EFC385-9355-11D0-835C-00AA003CCABD}" #usecom global ITTerminalSupport IID_ITTerminalSupport "{}" #comfunc global ITTerminalSupport_get_StaticTerminals 7 sptr #comfunc global ITTerminalSupport_EnumerateStaticTerminals 8 sptr #comfunc global ITTerminalSupport_get_DynamicTerminalClasses 9 sptr #comfunc global ITTerminalSupport_EnumerateDynamicTerminalClasses 10 sptr #comfunc global ITTerminalSupport_CreateTerminal 11 wstr,int,int,sptr #comfunc global ITTerminalSupport_GetDefaultStaticTerminal 12 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。