Win32 API 日本語リファレンス
ホームMedia.DirectShow › IQueueCommand

IQueueCommand

COM
IID56a868b7-0ad4-11ce-b03a-0020af0ba770継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

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 メソッドは、指定したストリーム時刻(すなわち、現在のストリーム時刻オフセットを基準とした表示時刻)に実行するメソッド呼び出しまたはプロパティ変更をキューに登録します。

pCmdIDeferredCommand**outIDeferredCommand インターフェイスポインターを受け取る変数のアドレス。
timeDOUBLEinコマンドを呼び出す時刻。
iidGUID*inインターフェイスの識別子 (IID) へのポインター。
dispidMethodINTinインターフェイス上のメソッドまたはプロパティのディスパッチ識別子 (DISPID)。IDispatch::Invoke メソッドの dispIdMember パラメーターに相当します。
wFlagsSHORTin呼び出しのコンテキストを表すフラグ。IDispatch::Invoke メソッドの wFlags パラメーターに相当します。
cArgsINTinpDispParams 内の引数の数。DISPPARAMS 構造体の cArgs メンバーに相当します。
pDispParamsVARIANT*in引数を格納する配列へのポインター。DISPPARAMS 構造体の rgvarg メンバーに相当します。
pvarResultVARIANT*inout結果を受け取る VARIANT へのポインター。IDispatch::Invoke メソッドの pVarResult パラメーターに相当します。
puArgErrSHORT*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 メソッドは、指定した表示時刻に呼び出すメソッドをキューに登録します。

pCmdIDeferredCommand**outIDeferredCommand インターフェイスポインターを受け取る変数のアドレス。
timeDOUBLEinコマンドを呼び出す時刻。
iidGUID*inインターフェイスの識別子 (IID) へのポインター。
dispidMethodINTinインターフェイス上のメソッドまたはプロパティのディスパッチ識別子 (DISPID)。IDispatch::Invoke メソッドの dispIdMember パラメーターに相当します。
wFlagsSHORTin呼び出しのコンテキストを表すフラグ。IDispatch::Invoke メソッドの wFlags パラメーターに相当します。
cArgsINTinpDispParams 内の引数の数。DISPPARAMS 構造体の cArgs メンバーに相当します。
pDispParamsVARIANT*in引数を格納する配列へのポインター。DISPPARAMS 構造体の rgvarg メンバーに相当します。
pvarResultVARIANT*inout結果を受け取る VARIANT へのポインター。IDispatch::Invoke メソッドの pVarResult パラメーターに相当します。
puArgErrSHORT*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)

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 指定が可能。