IQueueCommand::InvokeAtStreamTime
InvokeAtStreamTime メソッドは、指定されたストリーム タイム (つまり、現在のストリーム タイム オフセットとプレゼンテーション タイムの差) に実行するため、メソッドまたはプロパティの変更をキューに入れる。
構文
HRESULT InvokeAtStreamTime(
IDeferredCommand **pCmd,
REFTIME time,
GUID *iid,
long dispidMember,
short wFlags,
long cArgs,
VARIANT *pDispParams,
VARIANT *pvarResult,
short *puArgErr
);
パラメータ
pCmd
[out] IDeferredCommand インターフェイス ポインタを受け取る変数のアドレス。
time
[in] コマンドを起動する時間。
iid
[in] インターフェイスのインターフェイス識別子 (IID) へのポインタ。
dispidMember
[in] インターフェイスのメソッドまたはプロパティのディスパッチ識別子 (DISPID)。IDispatch::InvokeAt メソッドの dispIdMember 引数と同等。
wFlags
[in] 呼び出しのコンテキストを記述するフラグ。IDispatch::InvokeAt メソッドの wFlags 引数と同等。
cArgs
[in] pDispParams 内の引数の数。DISPPARAMS 構造体の cArgs メンバと同等。
pDispParams
[in] 引数を含む配列へのポインタ。DISPPARAMS 構造体の rgvarg メンバと同等。
pvarResult
[in, out] 結果を受け取る VARIANT へのポインタ。IDispatch::InvokeAt メソッドの pVarResult 引数と同等。
puArgErr
[out] 最初にエラーが発生した引数のインデックスを受け取る変数へのポインタ。IDispatch::InvokeAt メソッドの puArgErr 引数と同等。
戻り値
HRESULT 値を返す。
注意
dispidMember 引数用に DISPID を取得するには、IDispatch::GetIDsOfNames メソッドを使う。
サンプル コード
次のサンプル コードでは、IMediaControl::Stop コマンドが 3.0 秒間キューに入れられる。
IQueueCommand *pQ = 0;
IMediaControl *pControl = 0;
// IQueueCommand を照会する。
pGraph->QueryInterface(IID_IQueueCommand, reinterpret_cast<void**>(&pQ));
// IMediaControl を照会する。
pGraph->QueryInterface(IID_IMediaControl, reinterpret_cast<void**>(&pControl));
// IMediaControl::Stop メソッドの DISPID を見つける。
OLECHAR *szMethod = OLESTR("Stop");
long dispid;
hr = pControl->GetIDsOfNames(IID_NULL, &szMethod, 1, 0, &dispid);
// コマンドを呼び出す。
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();
}
参照