次の方法で共有


IMFMediaEventGenerator::BeginGetEvent メソッド (mfobjects.h)

キュー内の次のイベントの非同期要求を開始します。

構文

HRESULT BeginGetEvent(
  [in] IMFAsyncCallback *pCallback,
  [in] IUnknown         *punkState
);

パラメーター

[in] pCallback

コールバック オブジェクトの IMFAsyncCallback インターフェイスへのポインター。 クライアントはこのインターフェイスを実装する必要があります。

[in] punkState

呼び出し元によって定義された状態オブジェクトの IUnknown インターフェイスへのポインター。 このパラメーターは、NULL でもかまいません。 このオブジェクトを使用して、状態情報を保持できます。 コールバックが呼び出されると、オブジェクトが呼び出し元に返されます。

戻り値

このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。

リターン コード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
NULL ポインター引数。
MF_E_MULTIPLE_BEGIN
同じコールバック ポインターと別の状態オブジェクトを持つ保留中の要求があります。
MF_E_MULTIPLE_SUBSCRIBERS
別のコールバック ポインターを持つ保留中の要求があります。
MF_E_SHUTDOWN
オブジェクトがシャットダウンされました。
MF_S_MULTIPLE_BEGIN
同じコールバック ポインターと状態オブジェクトを持つ保留中の要求があります。

注釈

新しいイベントが使用可能になると、イベント ジェネレーターは 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

こちらもご覧ください

IMFMediaEventGenerator

メディア イベント ジェネレーター