次の方法で共有


IResourceManager::RequestResource

RequestResource メソッドは、所定の登録済みリソースの使用を要求する。

構文

  HRESULT RequestResource(
  LONG idResource,
  IUnknown *pFocusObject,
  IResourceConsumer *pConsumer
);

パラメータ

idResource

[in] リソース登録時に取得されたリソースのトークン。

pFocusObject

[in] 要求に関連付けられたフォーカス オブジェクトの IUnknown インターフェイス (通常はフィルタの IUnknown インターフェイス) へのポインタ。

pConsumer

[in] リソースを要求しているオブジェクトの IResourceConsumer インターフェイスへのポインタ。

戻り値

HRESULT 値を返す。要求したリソースが返された場合は S_OK を返す。リソースが利用できない場合は S_FALSE を返す。この場合、リソース マネージャは、リソースが利用可能になった時点で、要求元オブジェクトをコールバックする。それ以外の戻り値はすべてエラーである。

注意

そのリソースへの要求が複数ある場合、リソース マネージャは、個々の要求で渡されたフォーカス オブジェクトを、最新の IResourceManager::SetFocus メソッドで渡されたフォーカス オブジェクトと比較することによって、優先順位を決定する。

要求は次の優先順位で処理される。

  1. 最新の SetFocus メソッドとまったく同じフォーカス オブジェクトに関する要求。
  2. フォーカス オブジェクトが共通ソース フィルタを共有しているような要求。その共通ソース フィルタのフォーカス オブジェクトは共通フィルタ グラフを共有している。
  3. フォーカスと同じ処理からの要求。

この優先順位を調べるとき、リソース マネージャは、フォーカス オブジェクトの QueryInterface を使って IID_IFilter を照会する。見つかった場合、リソース マネージャは、IBaseFilter メソッドを使って、フィルタ グラフを調べ、現在のフォーカス オブジェクトと共通のソース フィルタを探す。

フィルタでは、そのフィルタの IUnknown インターフェイスを pFocusObject 引数に渡さなければならない。フィルタ グラフ マネージャは、フォーカス オブジェクトを調べるとき、フィルタをフィルタ グラフと比較して、共通のソース フィルタまでフィルタを追跡しようとする。

フォーカス オブジェクトは、要求の有効期間全体を通して有効である必要がある。要求の有効期間とは、IResourceManager::CancelRequest メソッドが呼び出されるか、または bStillWant 引数に FALSE を設定して IResourceManager::NotifyRelease メソッドが呼び出されるまでの期間である。

参照