IMFMediaEventGenerator::BeginGetEvent メソッド (mfobjects.h)
キュー内の次のイベントの非同期要求を開始します。
構文
HRESULT BeginGetEvent(
[in] IMFAsyncCallback *pCallback,
[in] IUnknown *punkState
);
パラメーター
[in] pCallback
コールバック オブジェクトの IMFAsyncCallback インターフェイスへのポインター。 クライアントはこのインターフェイスを実装する必要があります。
[in] punkState
呼び出し元によって定義された状態オブジェクトの IUnknown インターフェイスへのポインター。 このパラメーターは、NULL でもかまいません。 このオブジェクトを使用して、状態情報を保持できます。 コールバックが呼び出されると、オブジェクトが呼び出し元に返されます。
戻り値
このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。
リターン コード | 説明 |
---|---|
|
メソッドが成功しました。 |
|
NULL ポインター引数。 |
|
同じコールバック ポインターと別の状態オブジェクトを持つ保留中の要求があります。 |
|
別のコールバック ポインターを持つ保留中の要求があります。 |
|
オブジェクトがシャットダウンされました。 |
|
同じコールバック ポインターと状態オブジェクトを持つ保留中の要求があります。 |
注釈
新しいイベントが使用可能になると、イベント ジェネレーターは IMFAsyncCallback::Invoke メソッドを呼び出 します。 Invoke メソッドは、IMFMediaEventGenerator::EndGetEvent を呼び出して IMFMediaEvent インターフェイスへのポインターを取得し、そのインターフェイスを使用してイベントを調べる必要があります。
EndGetEvent を呼び出す前に、BeginGetEvent を 2 回目に呼び出さないでください。 最初の呼び出しはまだ保留中ですが、同じオブジェクトに対する追加の呼び出しは失敗します。 また、非同期要求がまだ保留中の場合、 IMFMediaEventGenerator::GetEvent メソッドは失敗します。
例
次のコードは、BeginGetEvent メソッドの IMFAsyncCallback::Invoke の一般的な実装を示しています。 Invoke メソッドは EndGetEvent を呼び出してイベント データを取得します。 次に、 BeginGetEvent をもう一度呼び出して、別のイベントを要求します。
//////////////////////////////////////////////////////////////////////
// Name: CEventHandler::Invoke
// Callback for asynchronous BeginGetEvent method.
//
// pAsyncResult: Pointer to the result.
//
// This code example assumes that CEventHandler is a class that
// implements the IMFAsyncCallback interface.
///////////////////////////////////////////////////////////////////////
HRESULT CEventHandler::Invoke(IMFAsyncResult *pAsyncResult)
{
HRESULT hr = S_OK;
IMFMediaEvent* pEvent = NULL;
MediaEventType meType = MEUnknown;
BOOL fGetAnotherEvent = TRUE;
HRESULT hrStatus = S_OK;
// Get the event from the event queue.
// Assume that m_pEventGenerator is a valid pointer to the
// event generator's IMFMediaEventGenerator interface.
hr = m_pEventGenerator->EndGetEvent(pAsyncResult, &pEvent);
// Get the event type.
if (SUCCEEDED(hr))
{
hr = pEvent->GetType(&meType);
}
// Get the event status. If the operation that triggered the event
// did not succeed, the status is a failure code.
if (SUCCEEDED(hr))
{
hr = pEvent->GetStatus(&hrStatus);
}
if (SUCCEEDED(hr))
{
// TODO: Handle the event.
}
// If not finished, request another event.
// Pass in a pointer to this instance of the application's
// CEventHandler class, which implements the callback.
if (fGetAnotherEvent)
{
hr = m_pEventGenerator->BeginGetEvent(this, NULL);
}
SAFE_RELEASE(pEvent);
return hr;
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | mfobjects.h (Mfidl.h を含む) |
Library | Mfuuid.lib |