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 メソッドで渡されたフォーカス オブジェクトと比較することによって、優先順位を決定する。
要求は次の優先順位で処理される。
- 最新の SetFocus メソッドとまったく同じフォーカス オブジェクトに関する要求。
- フォーカス オブジェクトが共通ソース フィルタを共有しているような要求。その共通ソース フィルタのフォーカス オブジェクトは共通フィルタ グラフを共有している。
- フォーカスと同じ処理からの要求。
この優先順位を調べるとき、リソース マネージャは、フォーカス オブジェクトの QueryInterface を使って IID_IFilter を照会する。見つかった場合、リソース マネージャは、IBaseFilter メソッドを使って、フィルタ グラフを調べ、現在のフォーカス オブジェクトと共通のソース フィルタを探す。
フィルタでは、そのフィルタの IUnknown インターフェイスを pFocusObject 引数に渡さなければならない。フィルタ グラフ マネージャは、フォーカス オブジェクトを調べるとき、フィルタをフィルタ グラフと比較して、共通のソース フィルタまでフィルタを追跡しようとする。
フォーカス オブジェクトは、要求の有効期間全体を通して有効である必要がある。要求の有効期間とは、IResourceManager::CancelRequest メソッドが呼び出されるか、または bStillWant 引数に FALSE を設定して IResourceManager::NotifyRelease メソッドが呼び出されるまでの期間である。
参照