IMoniker::Reduce メソッド (objidl.h)
モニカーを最も単純な形式に減らします。
構文
HRESULT Reduce(
[in] IBindCtx *pbc,
[in] DWORD dwReduceHowFar,
[in, out] IMoniker **ppmkToLeft,
[out] IMoniker **ppmkReduced
);
パラメーター
[in] pbc
このバインド操作で使用されるバインド コンテキスト上の IBindCtx インターフェイスへのポインター。 バインド コンテキストは、バインド プロセス中にバインドされたオブジェクトをキャッシュし、バインド コンテキストを使用するすべての操作に適用されるパラメーターを含み、モニカー実装がその環境に関する情報を取得する手段を提供します。
[in] dwReduceHowFar
このモニカーをどの程度縮小するかを指定します。 このパラメーターは、 MKRREDUCE 列挙の値のいずれかである必要があります。
[in, out] ppmkToLeft
エントリで、このモニカーの左側にあるモニカーへのインターフェイス ポインターを含む IMoniker ポインター変数へのポインター。 このパラメーターは、複合モニカーのさまざまなコンポーネント間の連携を可能にするために、主にモニカー実装者によって使用されます。モニカー クライアントは通常 、NULL を渡すことができます。
戻り値の場合、*ppmkToLeft は通常 NULL に設定され、元のモニカーが左側に変更されていないことを示します。 まれな状況では、*ppmkToLeft はモニカーを示し、左側の前のモニカーを無視し、*ppmkToLeft を介して返されるモニカーが置き換えであることを示します。 このような状況では、実装では、このモニカーの左側にある古いモニカーで Release を呼び出し、返された新しいモニカーで AddRef を呼び出す必要があります。呼び出し元は後で解放する必要があります。 エラーが発生した場合、実装はインターフェイス ポインターを変更せずに残すか 、NULL に設定できます。
[out] ppmkReduced
このモニカーの縮小形式へのインターフェイス ポインターを受け取る IMoniker ポインター変数へのポインター。エラーが発生した場合、またはこのモニカーが何も減らされない場合は NULL になる可能性があります。 このモニカーを減らすことができない場合、*ppmkReduced はこのモニカーに設定され、戻り値はMK_S_REDUCED_TO_SELF。 *ppmkReduced が NULL 以外の場合、実装では新しいモニカーで AddRef を呼び出す必要があります。 Release を呼び出すのは呼び出し元の責任です。 (これは、*ppmkReduced がこのモニカーに設定されている場合でも当てはまります)。
戻り値
このメソッドは、E_OUTOFMEMORYおよびE_UNEXPECTED標準の戻り値と、次の値を返すことができます。
リターン コード | 説明 |
---|---|
|
メソッドは正常に完了しました。 |
|
このモニカーをこれ以上減らすことはできなかったため、 ppmkReduced はこのモニカーを示します。 |
|
バインド コンテキストの BIND_OPTS 構造体で指定された制限時間内に操作 を 完了できませんでした。 |
注釈
このメソッドは、次の用途を対象としています。
- 新しい種類のモニカー クラスとして、ユーザー定義マクロまたはエイリアスの構築を有効にします。 縮小すると、マクロが評価されるモニカーが返されます。
- 移動中にデータを追跡する一種のモニカーの構築を有効にします。 縮小すると、現在の場所にあるデータのモニカーが返されます。
- ファイル名に依存しないファイルにアクセスする識別子ベースのメソッドをサポートするファイル システムの場合。ファイル モニカーは、これらの識別子のいずれかを含むモニカーに減らすことができます。
呼び出し元へのメモ
上記のシナリオは、現在、システム提供のモニカー クラスによって実装されていません。縮小モニカーは最も具体的な形式であるため、IMoniker::IsEqual メソッドを使用して 2 つのモニカーを比較する前に Reduce を呼び出す必要があります。 IsEqual は、縮小する前に 2 つのモニカーに対してS_FALSEを返し、減らした後にS_OKを返す場合があります。
実装者へのメモ
現在のモニカーを減らすことができる場合、実装ではモニカーをインプレースで減らしてはなりません。 代わりに、現在のモニカーの縮小状態を表す新しいモニカーを返す必要があります。 この方法では、呼び出し元は引き続き、非誘導モニカーを使用するオプションを持っています (たとえば、そのコンポーネントを列挙します)。 実装では、少なくとも要求される限りモニカーを減らす必要があります。実装固有の注意事項
実装 | メモ |
---|---|
アンチモニカー | このメソッドは、MK_S_REDUCED_TO_SELFを返し、同じモニカーを返します。 |
クラス モニカー | このメソッドは、MK_S_REDUCED_TO_SELFを返し、同じモニカーを返します。 |
ファイル モニカー | このメソッドは、MK_S_REDUCED_TO_SELFを返し、同じモニカーを返します。 |
汎用複合モニカー | このメソッドは、各コンポーネント モニカーに対して Reduce を再帰的に呼び出します。 いずれかのコンポーネントがそれ自体を減らす場合、メソッドは S_OKを返し、縮小されたコンポーネントの複合を返します。 減少が発生しなかった場合、メソッドは同じモニカーを返し、MK_S_REDUCED_TO_SELFを返します。 |
アイテム モニカー | このメソッドは、MK_S_REDUCED_TO_SELFを返し、同じモニカーを返します。 |
OBJREF モニカー | このメソッドは、MK_S_REDUCED_TO_SELFを返し、同じモニカーを返します。 |
ポインター モニカー | このメソッドは、MK_S_REDUCED_TO_SELFを返し、同じモニカーを返します。 |
URL モニカー | このメソッドは、MK_S_REDUCED_TO_SELFを返し、同じモニカーを返します。 |
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | objidl.h |