IMoniker::CommonPrefixWith メソッド (objidl.h)
このモニカーが指定したモニカーと共通するプレフィックスに基づいて、新しいモニカーを作成します。
構文
HRESULT CommonPrefixWith(
[in] IMoniker *pmkOther,
[out] IMoniker **ppmkPrefix
);
パラメーター
[in] pmkOther
共通のプレフィックスがあるかどうかを判断するために、このモニカーと比較する別のモニカーの IMoniker インターフェイスへのポインター。
[out] ppmkPrefix
このモニカーと pmkOther の共通プレフィックスであるモニカーへのインターフェイス ポインターを受け取る IMoniker* ポインター変数のアドレス。 成功した場合、実装では、結果のモニカーで AddRef を呼び出す必要があります。 Release を呼び出すのは呼び出し元の責任です。 エラーが発生した場合、または共通のプレフィックスがない場合、実装では *ppmkPrefix を NULL に設定する必要があります。
戻り値
このメソッドは、E_OUTOFMEMORY標準の戻り値と、次の値を返すことができます。
リターン コード | 説明 |
---|---|
|
このモニカーでも pmkOther でもない共通のプレフィックスが存在します。 |
|
共通のプレフィックスが存在しません。 |
|
pmkOther 全体は、このモニカーのプレフィックスです。 |
|
2 つのモニカーは同じです。 |
|
このモニカーは、 pmkOther モニカーのプレフィックスです。 |
|
このメソッドは、相対モニカーで呼び出されました。 相対モニカーで共通のプレフィックスを使用することは意味がありません。 |
注釈
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を返します。 それ以外の場合は、それ自体を pmkThis、pmkOther、ppmkPrefix として使用して MonikerCommonPrefixWith を呼び出した結果を返します。これは、pmkOther が汎用複合モニカーの場合を処理します。 |
ファイル モニカー |
両方のモニカーがファイル モニカーの場合、このメソッドは、2 つのファイル モニカーの先頭にある共通コンポーネントに基づくファイル モニカーを返します。 ファイル モニカーのコンポーネントには、次の種類を指定できます。
このメソッドは、共通のプレフィックスがない場合に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 |