ホーム › Media.DirectShow › IQueueCommand
IQueueCommand
COM公式ドキュメント
IQueueCommand インターフェースは、指定した時刻に処理するコマンドをキューに登録します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
vtbl 3 HRESULT InvokeAtStreamTime(IDeferredCommand** pCmd, DOUBLE time, GUID* iid, INT dispidMethod, SHORT wFlags, INT cArgs, VARIANT* pDispParams, VARIANT* pvarResult, SHORT* puArgErr)
InvokeAtStreamTime メソッドは、指定したストリーム時刻(すなわち、現在のストリーム時刻オフセットを基準とした表示時刻)に実行するメソッド呼び出しまたはプロパティ変更をキューに登録します。
| pCmd | IDeferredCommand** | out | IDeferredCommand インターフェイスポインターを受け取る変数のアドレス。 |
| time | DOUBLE | in | コマンドを呼び出す時刻。 |
| iid | GUID* | in | インターフェイスの識別子 (IID) へのポインター。 |
| dispidMethod | INT | in | インターフェイス上のメソッドまたはプロパティのディスパッチ識別子 (DISPID)。IDispatch::Invoke メソッドの dispIdMember パラメーターに相当します。 |
| wFlags | SHORT | in | 呼び出しのコンテキストを表すフラグ。IDispatch::Invoke メソッドの wFlags パラメーターに相当します。 |
| cArgs | INT | in | pDispParams 内の引数の数。DISPPARAMS 構造体の cArgs メンバーに相当します。 |
| pDispParams | VARIANT* | in | 引数を格納する配列へのポインター。DISPPARAMS 構造体の rgvarg メンバーに相当します。 |
| pvarResult | VARIANT* | inout | 結果を受け取る VARIANT へのポインター。IDispatch::Invoke メソッドの pVarResult パラメーターに相当します。 |
| puArgErr | SHORT* | out | エラーのある最初の引数のインデックスを受け取る変数へのポインター。IDispatch::Invoke メソッドの puArgErr パラメーターに相当します。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
dispidMember パラメーターに指定する DISPID を取得するには、IDispatch::GetIDsOfNames メソッドを使用してください。
使用例
次の例では、IMediaControl::Stop コマンドを 3.0 秒後の実行としてキューに登録します。
IQueueCommand *pQ = 0;
IMediaControl *pControl = 0;
// Query for IQueueCommand.
pGraph->QueryInterface(IID_IQueueCommand, reinterpret_cast<void**>(&pQ));
// Query for IMediaControl.
pGraph->QueryInterface(IID_IMediaControl, reinterpret_cast<void**>(&pControl));
// Find the DISPID of the IMediaControl::Stop method.
OLECHAR *szMethod = OLESTR("Stop");
long dispid;
hr = pControl->GetIDsOfNames(IID_NULL, &szMethod, 1, 0, &dispid);
// Invoke the command.
IDeferredCommand *pCmd = 0;
hr = pQ->InvokeAtPresentationTime(&pCmd, 3.0,
const_cast<GUID*>(&IID_IMediaControl), dispid, DISPATCH_METHOD,
0, 0, 0, 0);
if (SUCCEEDED(hr))
{
pControl->Run();
pCmd->Release();
}
vtbl 4 HRESULT InvokeAtPresentationTime(IDeferredCommand** pCmd, DOUBLE time, GUID* iid, INT dispidMethod, SHORT wFlags, INT cArgs, VARIANT* pDispParams, VARIANT* pvarResult, SHORT* puArgErr)
InvokeAtPresentationTime メソッドは、指定した表示時刻に呼び出すメソッドをキューに登録します。
| pCmd | IDeferredCommand** | out | IDeferredCommand インターフェイスポインターを受け取る変数のアドレス。 |
| time | DOUBLE | in | コマンドを呼び出す時刻。 |
| iid | GUID* | in | インターフェイスの識別子 (IID) へのポインター。 |
| dispidMethod | INT | in | インターフェイス上のメソッドまたはプロパティのディスパッチ識別子 (DISPID)。IDispatch::Invoke メソッドの dispIdMember パラメーターに相当します。 |
| wFlags | SHORT | in | 呼び出しのコンテキストを表すフラグ。IDispatch::Invoke メソッドの wFlags パラメーターに相当します。 |
| cArgs | INT | in | pDispParams 内の引数の数。DISPPARAMS 構造体の cArgs メンバーに相当します。 |
| pDispParams | VARIANT* | in | 引数を格納する配列へのポインター。DISPPARAMS 構造体の rgvarg メンバーに相当します。 |
| pvarResult | VARIANT* | inout | 結果を受け取る VARIANT へのポインター。IDispatch::Invoke メソッドの pVarResult パラメーターに相当します。 |
| puArgErr | SHORT* | out | エラーのある最初の引数のインデックスを受け取る変数へのポインター。IDispatch::Invoke メソッドの puArgErr パラメーターに相当します。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
dispidMember パラメーターに指定する DISPID を取得するには、IDispatch::GetIDsOfNames メソッドを使用してください。
コード例については、IQueueCommand::InvokeAtStreamTime を参照してください。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
出力引数:
#define global IID_IQueueCommand "{56A868B7-0AD4-11CE-B03A-0020AF0BA770}" #usecom global IQueueCommand IID_IQueueCommand "{}" #comfunc global IQueueCommand_InvokeAtStreamTime 3 sptr,double,var,int,int,int,var,var,var #comfunc global IQueueCommand_InvokeAtPresentationTime 4 sptr,double,var,int,int,int,var,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IQueueCommand "{56A868B7-0AD4-11CE-B03A-0020AF0BA770}" #usecom global IQueueCommand IID_IQueueCommand "{}" #comfunc global IQueueCommand_InvokeAtStreamTime 3 sptr,double,sptr,int,int,int,sptr,sptr,sptr #comfunc global IQueueCommand_InvokeAtPresentationTime 4 sptr,double,sptr,int,int,int,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。