ITStreamControl
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ITStreamControl インターフェースは、通話 (コール) のメディアストリーミング機能を表し、アプリケーションがストリームを列挙、作成、または削除するためのメソッドを公開します。
メソッド 4
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
CreateStream メソッドは、新しいメディアストリームを作成します。
| lMediaType | INT | in | ストリームの メディアタイプ を示します。 |
| td | TERMINAL_DIRECTION | in | TERMINAL_DIRECTION を示します。 |
| ppStream | ITStream** | out | 新しく作成された ITStream インターフェースへのポインターのポインター。 |
戻り値
このメソッドは、次の値のいずれかを返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| ppStream パラメーターが有効なポインターではありません。 | |
| 操作を実行するのに十分なメモリがありません。 | |
| lMediaType パラメーターが有効なメディアタイプではありません。 | |
| td パラメーターが有効なターミナルの方向ではありません。 | |
| サポートされるストリームの最大数に既に達しています。 | |
| この操作はサポートされていません。 |
解説(Remarks)
多くの MSP はストリームの動的な作成をサポートしておらず、このメソッドの実装で単に TAPI_E_MAXSTREAMS を返します。既定のストリームは通話 (コール) の作成時に自動的に利用可能になるため、ほとんどのアプリケーションではこのメソッドを使用する必要はありません。
ストリームの作成または削除には、リモートエンドポイントとのやり取りが伴う場合があり、その結果、ストリームの停止または開始時に受信される CMC_LOCAL_REQUEST メッセージではなく、CMC_REMOTE_REQUEST が生成されます。
TAPI は、ITStreamControl::CreateStream が返す ITStream インターフェースに対して AddRef メソッドを呼び出します。アプリケーションは、ITStream インターフェースに関連付けられたリソースを解放するために、そのインターフェースに対して Release を呼び出す必要があります。
RemoveStream メソッドは、メディアストリームを削除します。
| pStream | ITStream* | in | ITStream インターフェースへのポインター。 |
戻り値
このメソッドは、次の値のいずれかを返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| pStream パラメーターが有効ではありません。 | |
| この操作はサポートされていません。 |
解説(Remarks)
一部の MSP は、ストリームの作成および削除という高度な概念をサポートしておらず、単に TAPI_E_NOTSUPPORTED を返す場合があります。
ストリームの作成または削除には、リモートエンドポイントとのやり取りが伴う場合があり、その結果、ストリームの停止または開始時に受信される CMC_LOCAL_REQUEST メッセージではなく、CMC_REMOTE_REQUEST が生成されます。
EnumerateStreams メソッドは、現在利用可能なメディアストリームを列挙します。C および C++ アプリケーション向けに提供されています。Visual Basic などのオートメーションクライアントアプリケーションは、get_Streams メソッドを使用する必要があります。
| ppEnumStream | IEnumStream** | out | IEnumStream 列挙子へのポインターのポインター。 |
戻り値
このメソッドは、次の値のいずれかを返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| 操作を実行するのに十分なメモリがありません。 | |
| ppEnumStream パラメーターが有効なポインターではありません。 |
解説(Remarks)
TAPI は、ITStreamControl::EnumerateStreams が返す IEnumStream インターフェースに対して AddRef メソッドを呼び出します。アプリケーションは、IEnumStream インターフェースに関連付けられたリソースを解放するために、そのインターフェースに対して Release を呼び出す必要があります。
get_Streams メソッドは、通話 (コール) で現在利用可能なメディアストリームのコレクションを作成します。Visual Basic で記述されたものなど、オートメーションクライアントアプリケーション向けに提供されています。C および C++ アプリケーションは、EnumerateStreams メソッドを使用する必要があります。
| pVariant | VARIANT* | out | ITStream インターフェースポインターの ITCollection を含む VARIANT へのポインター。 |
戻り値
このメソッドは、次の値のいずれかを返すことができます。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| 操作を実行するのに十分なメモリがありません。 | |
| pVariant パラメーターが有効なポインターではありません。 |
解説(Remarks)
TAPI は、ITStreamControl::get_Stream が返す ITStream インターフェースに対して AddRef メソッドを呼び出します。アプリケーションは、ITStream インターフェースに関連付けられたリソースを解放するために、そのインターフェースに対して Release を呼び出す必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITStreamControl "{EE3BD604-3868-11D2-A045-00C04FB6809F}" #usecom global ITStreamControl IID_ITStreamControl "{}" #comfunc global ITStreamControl_CreateStream 7 int,int,sptr #comfunc global ITStreamControl_RemoveStream 8 sptr #comfunc global ITStreamControl_EnumerateStreams 9 sptr #comfunc global ITStreamControl_get_Streams 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_ITStreamControl "{EE3BD604-3868-11D2-A045-00C04FB6809F}" #usecom global ITStreamControl IID_ITStreamControl "{}" #comfunc global ITStreamControl_CreateStream 7 int,int,sptr #comfunc global ITStreamControl_RemoveStream 8 sptr #comfunc global ITStreamControl_EnumerateStreams 9 sptr #comfunc global ITStreamControl_get_Streams 10 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。