IMoniker::CommonPrefixWith メソッド (objidl.h)

このモニカーが指定したモニカーと共通するプレフィックスに基づいて、新しいモニカーを作成します。

構文

HRESULT CommonPrefixWith(
  [in]  IMoniker *pmkOther,
  [out] IMoniker **ppmkPrefix
);

パラメーター

[in] pmkOther

共通のプレフィックスがあるかどうかを判断するために、このモニカーと比較する別のモニカーの IMoniker インターフェイスへのポインター。

[out] ppmkPrefix

このモニカーと pmkOther の共通プレフィックスであるモニカーへのインターフェイス ポインターを受け取る IMoniker* ポインター変数のアドレス。 成功した場合、実装では、結果のモニカーで AddRef を呼び出す必要があります。 Release を呼び出すのは呼び出し元の責任です。 エラーが発生した場合、または共通のプレフィックスがない場合、実装では *ppmkPrefixNULL に設定する必要があります。

戻り値

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

リターン コード 説明
S_OK
このモニカーでも pmkOther でもない共通のプレフィックスが存在します。
MK_S_NOPREFIX
共通のプレフィックスが存在しません。
MK_S_HIM
pmkOther 全体は、このモニカーのプレフィックスです。
MK_S_US
2 つのモニカーは同じです。
MK_S_ME
このモニカーは、 pmkOther モニカーのプレフィックスです。
MK_S_NOTBINDABLE
このメソッドは、相対モニカーで呼び出されました。 相対モニカーで共通のプレフィックスを使用することは意味がありません。

注釈

CommonPrefixWith は、このモニカー オブジェクトと別のモニカー上のモニカーの共通プレフィックスで構成される新しいモニカーを作成します。 たとえば、1 つのモニカーがパス "c:\projects\secret\art\pict1.bmp" を表し、別のモニカーがパス "c:\projects\secret\docs\chap1.txt" を表す場合、これら 2 つのモニカーの共通プレフィックスはパス "c:\projects\secret" を表すモニカーになります。

呼び出し元へのメモ

CommonPrefixWith メソッドは、主に IMoniker::RelativePathTo メソッドの実装で呼び出されます。 モニカーを使用してオブジェクトを検索するクライアントは、このメソッドを呼び出す必要はほとんどありません。

pmkOther とこのモニカーが両方とも絶対モニカーである場合にのみ、このメソッドを呼び出します。 絶対モニカーは、ファイル モニカーまたは汎用複合で、左端のコンポーネントは絶対パスを表すファイル モニカーです。 意味のある結果が得られないため、相対モニカーではこのメソッドを呼び出さないでください。

実装者へのメモ

実装では、 最初に pmkOther が認識するクラスのモニカーであり、特別な処理を提供できるかどうかを判断する必要があります (たとえば、このモニカーと同じクラスの場合)。 その場合、実装で 2 つのモニカーの共通プレフィックスを決定する必要があります。 それ以外の場合は、両方のモニカーを MonikerCommonPrefixWith 関数の呼び出しで渡す必要があります。これは、ジェネリック ケースを正しく処理します。

実装固有の注意事項

実装 メモ
アンチモニカー もう一方のモニカーもアンチモニカーである場合、メソッドは MK_S_USを返し、ppmkPrefix をこのモニカーに設定します。 それ以外の場合、メソッドは MonikerCommonPrefixWith 関数を 呼び出します。 この関数は、他のモニカーがジェネリック 複合である場合を正しく処理します。
クラス モニカー pmkOther がこのモニカーと等しい場合は、このモニカーへのポインターを取得し、MK_S_USを返します。 pmkOther がクラス モニカーで、このモニカーと等しくない場合は、MK_E_NOPREFIXを返します。 それ以外の場合は、それ自体を pmkThispmkOtherppmkPrefix として使用して MonikerCommonPrefixWith を呼び出した結果を返します。これは、pmkOther が汎用複合モニカーの場合を処理します。
ファイル モニカー 両方のモニカーがファイル モニカーの場合、このメソッドは、2 つのファイル モニカーの先頭にある共通コンポーネントに基づくファイル モニカーを返します。 ファイル モニカーのコンポーネントには、次の種類を指定できます。
  • \\server\share という形式のコンピューター名。 コンピューター名は 1 つのコンポーネントとして扱われるので、パス "\\myserver\public\work" と "\\myserver\private\games" を表す 2 つのモニカーには共通のプレフィックスとして "\\myserver" がありません。
  • ドライブの指定 ("C:"など)。
  • ディレクトリまたはファイル名。
他のモニカーがファイル モニカーでない場合、このメソッドは MonikerCommonPrefixWith 関数の呼び出しで両方のモニカーを渡します。 この関数は、他のモニカーがジェネリック 複合である場合を正しく処理します。

このメソッドは、共通のプレフィックスがない場合にMK_E_NOPREFIXを返します。

汎用複合モニカー 他のモニカーが複合の場合、このメソッドは各複合のコンポーネントを左から右に比較します。 返される共通プレフィックス モニカーは、両方のモニカーに共通していた左端のコンポーネントの数に応じて、複合モニカーである場合もあります。 他のモニカーが複合でない場合、メソッドは単にそれをこのモニカーの左端のコンポーネントと比較します。

モニカーが等しい場合、メソッドは MK_S_USを返し、 ppmkPrefix をこのモニカーに設定します。 もう一方のモニカーがこのモニカーのプレフィックスである場合、メソッドは MK_S_HIMを返し、 ppmkPrefix を他のモニカーに設定します。 このモニカーが他方のプレフィックスである場合、このメソッドは MK_S_MEを返し、 ppmkPrefix をこのモニカーに設定します。

共通のプレフィックスがない場合、このメソッドは MK_E_NOPREFIXを返し、 ppmkPrefix を NULL に設定 します

アイテム モニカー もう一方のモニカーがこのモニカーと等しい項目モニカーである場合、このメソッドは *ppmkPrefix をこのモニカーに設定し、MK_S_USを返します。それ以外の場合、メソッドは MonikerCommonPrefixWith 関数を 呼び出します。 この関数は、他のモニカーがジェネリック 複合である場合を正しく処理します。
OBJREF モニカー 2 つのモニカーが等しい場合、このメソッドは MK_S_USを返し、*ppmkPrefix を NULL に設定 します。 もう一方のモニカーが OBJREF モニカーでない場合、このメソッドは両方のモニカーを MonikerCommonPrefixWith 関数に渡します。 この関数は、他のモニカーがジェネリック 複合である場合を正しく処理します。

共通のプレフィックスがない場合、このメソッドは MK_E_NOPREFIXを返します。

ポインター モニカー 2 つのモニカーが等しい場合、このメソッドは MK_S_USを返し、*ppmkPrefix をこのモニカーに設定します。 それ以外の場合、メソッドは MK_E_NOPREFIXを返し、*ppmkPrefix を NULL に設定 します
URL モニカー このメソッドは、E_NOTIMPLを返します。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー objidl.h

こちらもご覧ください

Imoniker

MonikerCommonPrefixWith