次の方法で共有


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。 *ppmkReducedNULL 以外の場合、実装では新しいモニカーで AddRef を呼び出す必要があります。 Release を呼び出すのは呼び出し元の責任です。 (これは、*ppmkReduced がこのモニカーに設定されている場合でも当てはまります)。

戻り値

このメソッドは、E_OUTOFMEMORYおよびE_UNEXPECTED標準の戻り値と、次の値を返すことができます。

リターン コード 説明
S_OK
メソッドは正常に完了しました。
MK_S_REDUCED_TO_SELF
このモニカーをこれ以上減らすことはできなかったため、 ppmkReduced はこのモニカーを示します。
MK_E_EXCEEDEDDEADLINE
バインド コンテキストの BIND_OPTS 構造体で指定された制限時間内に操作 完了できませんでした。

注釈

このメソッドは、次の用途を対象としています。

  • 新しい種類のモニカー クラスとして、ユーザー定義マクロまたはエイリアスの構築を有効にします。 縮小すると、マクロが評価されるモニカーが返されます。
  • 移動中にデータを追跡する一種のモニカーの構築を有効にします。 縮小すると、現在の場所にあるデータのモニカーが返されます。
  • ファイル名に依存しないファイルにアクセスする識別子ベースのメソッドをサポートするファイル システムの場合。ファイル モニカーは、これらの識別子のいずれかを含むモニカーに減らすことができます。
dwReduceHowFar パラメーターで渡される MKRREDUCE フラグの目的は、表示名がユーザーに認識可能なフォームにモニカーをプログラムで減らす機能を提供することです。 たとえば、ファイル システム内のパス、ワープロ ドキュメント内のブックマーク、スプレッドシート内の範囲名はすべてユーザーが認識できます。 これに対し、モニカーにカプセル化されたマクロまたはエイリアスは、ユーザーには認識できません。

呼び出し元へのメモ

上記のシナリオは、現在、システム提供のモニカー クラスによって実装されていません。

縮小モニカーは最も具体的な形式であるため、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

こちらもご覧ください

Imoniker