ITSubStreamControl
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ITSubStreamControl インターフェイスは、アプリケーションがサブストリームを列挙、作成、または削除できるようにするメソッドを公開します。多くの MSP はこのインターフェイスをサポートしていません。
メソッド 4
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
CreateSubStream メソッドは、サブストリームを作成します。
| ppSubStream | ITSubStream** | out | 作成された ITSubStream インターフェイスへのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| ppSubStream パラメーターが有効なポインターではありません。 | |
| 操作を実行するのに十分なメモリがありません。 | |
| ストリームの最大数に既に達しているため、サブストリームを作成できません。 |
解説(Remarks)
多くの MSP はサブストリームの動的な作成をサポートしておらず、このメソッドの実装では単に TAPI_E_MAXSTREAMS を返します。
TAPI は、ITSubStreamControl::CreateSubStream が返す ITSubStream インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、 ITSubStream インターフェイスに関連付けられているリソースを解放するために、そのインターフェイスに対して Release を呼び出す必要があります。
RemoveSubStream メソッドは、サブストリームを削除します。
| pSubStream | ITSubStream* | in | 削除する ITSubStream へのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| pSubStream パラメーターが有効なインターフェイスを指していません。 | |
| 操作を実行するのに十分なメモリがありません。 | |
| pSubStream パラメーターが有効なサブストリームを指していません。 |
解説(Remarks)
一部の MSP は、サブストリームの作成と削除という高度な概念をサポートしておらず、単に TAPI_E_NOTSUPPORTED を返す場合があります。
EnumerateSubStreams メソッドは、現在利用可能なメディアサブストリームを列挙します。C および C++ アプリケーション向けに提供されています。Visual Basic などのオートメーションクライアントアプリケーションでは、get_SubStreams メソッドを使用する必要があります。
| ppEnumSubStream | IEnumSubStream** | out | サブストリームの IEnumSubStream 列挙へのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| 操作を実行するのに十分なメモリがありません。 | |
| ppEnumSubStream パラメーターが有効なポインターではありません。 |
解説(Remarks)
TAPI は、ITSubStreamControl::EnumerateSubStreams が返す IEnumSubStream インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、 IEnumSubStream インターフェイスに関連付けられているリソースを解放するために、そのインターフェイスに対して Release を呼び出す必要があります。
get_SubStreams メソッドは、現在利用可能なサブストリームのコレクションを作成します。Visual Basic で記述されたものなど、オートメーションクライアントアプリケーション向けに提供されています。C および C++ アプリケーションでは、EnumerateSubStreams メソッドを使用する必要があります。
| pVariant | VARIANT* | out | ITSubStream インターフェイスポインターの ITCollection を格納した VARIANT へのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| pVariant パラメーターが有効なポインターではありません。 | |
| 通話 (コール) がシャットダウンされたと考えられます。 | |
| 操作を実行するのに十分なメモリがありません。 |
解説(Remarks)
TAPI は、ITSubStreamControl::get_SubStreams が返す ITSubStream インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、 ITSubStream インターフェイスに関連付けられているリソースを解放するために、そのインターフェイスに対して Release を呼び出す必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITSubStreamControl "{EE3BD607-3868-11D2-A045-00C04FB6809F}" #usecom global ITSubStreamControl IID_ITSubStreamControl "{}" #comfunc global ITSubStreamControl_CreateSubStream 7 sptr #comfunc global ITSubStreamControl_RemoveSubStream 8 sptr #comfunc global ITSubStreamControl_EnumerateSubStreams 9 sptr #comfunc global ITSubStreamControl_get_SubStreams 10 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ITSubStreamControl "{EE3BD607-3868-11D2-A045-00C04FB6809F}" #usecom global ITSubStreamControl IID_ITSubStreamControl "{}" #comfunc global ITSubStreamControl_CreateSubStream 7 sptr #comfunc global ITSubStreamControl_RemoveSubStream 8 sptr #comfunc global ITSubStreamControl_EnumerateSubStreams 9 sptr #comfunc global ITSubStreamControl_get_SubStreams 10 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。