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

このモニカーと指定したモニカーの間に相対モニカーを作成します。

構文

HRESULT RelativePathTo(
  [in]  IMoniker *pmkOther,
  [out] IMoniker **ppmkRelPath
);

パラメーター

[in] pmkOther

相対パスを取得する必要があるモニカー上の IMoniker インターフェイスへのポインター。

[out] ppmkRelPath

相対モニカーへのインターフェイス ポインターを受け取る IMoniker ポインター変数へのポインター。 成功した場合、実装は新しいモニカーで AddRef を呼び出す必要があります。 Release を呼び出すのは呼び出し元の責任です。 エラーが発生した場合、実装は *ppmkRelPath を NULL に設定 します

戻り値

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

リターン コード 説明
S_OK
メソッドは正常に完了しました。
MK_S_HIM
2 つのモニカーで共通のプレフィックスが共有されておらず、 ppmkRelPath で返されるモニカーは pmkOther です
MK_E_NOTBINDABLE
このモニカーは、アイテム モニカーなどの相対的なモニカーです。 このモニカーは、相対パスを決定する前に、コンテナーのモニカーで構成する必要があります。

注釈

相対モニカーは、相対パス (. など) に似ています。\backup")。 たとえば、パス "c:\projects\secret\art\pict1.bmp" を表すモニカーと、パス "c:\projects\secret\docs\chap1.txt" を表すモニカーがあるとします。 最初のモニカーで RelativePathTo を 呼び出し、2 番目のモニカーを pmkOther パラメーターとして渡すと、パス ". を表す相対モニカーが作成されます。\docs\chap1.txt"。

呼び出し元へのメモ

モニカー クライアントは通常 、RelativePathTo を呼び出す必要はありません。 このメソッドは、主にリンク オブジェクトの既定のハンドラーによって呼び出されます。 リンク オブジェクトには、リンク ソースを識別するための絶対モニカーと相対モニカーの両方が含まれています。 (これにより、ユーザーがコンテナー ファイルとソース ファイルの両方を含むディレクトリ ツリーを移動した場合、リンク追跡が有効になります)。既定のハンドラーは、このメソッドを呼び出して、コンテナー ドキュメントからリンク ソースへの相対モニカーを作成します。 (つまり、コンテナー ドキュメントを識別するモニカーで RelativePathTo を 呼び出し、リンク ソースを pmkOther パラメーターとして識別するモニカーを渡します)。

RelativePathTo を呼び出す場合は、ファイル モニカーや、左端のコンポーネントがファイル モニカーである複合モニカーなど、絶対モニカーでのみ呼び出します。この場合、ファイル モニカーは絶対パスを表します。 相対モニカーでは、このメソッドを呼び出さないでください。

実装者へのメモ

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

相対パスを決定する最初の手順は、このモニカーと pmkOther の共通プレフィックスを決定することです。 次の手順では、このモニカーと pmkOther をそれぞれ 2 つの部分 (P、myTail) と (P、otherTail) に分割します。ここで、P は共通のプレフィックスです。 次に、正しい相対パスは、otherTail で構成される myTail の逆パスです。

Comp( Inv( myTail ), otherTail )

ここで、Comp() は合成演算を表し、Inv() は逆演算を表します。

特定の種類のモニカーでは、 IMoniker::Inverse メソッドを使用して myTail の逆関数を構築することはできません。 たとえば、ファイル モニカーは反モニカーを逆として返しますが、 RelativePathTo メソッドでは、それぞれがパス ".." を表す 1 つ以上のファイル モニカーを使用して myTail の逆関数を構築する必要があります。

実装固有の注意事項

実装 メモ
アンチモニカー このメソッドは、MK_S_HIMを返し、*ppmkRelPath を他のモニカーに設定します。
クラス モニカー このメソッドは、このモニカー、pmkOther、ppmkRelPath、TRUEdwReserved として pmkSrc と等しい MonikerRelativePathTo を呼び出した結果返します。
ファイル モニカー このメソッドはモニカーを計算します。このモニカーの右側に構成すると、もう一方のモニカーが生成されます。 たとえば、このモニカーのパスが "C:\work\docs\report.doc" で、もう一方のモニカーが "C:\work\art\picture.bmp" の場合、計算されたモニカーのパスは になります。\..\art\picture.bmp"。
汎用複合モニカー このメソッドは、2 つのモニカーの共通プレフィックスを検索し、共通プレフィックスが削除されたときに剰余で構成される 2 つのモニカーを作成します。 次に、このモニカーの残りの部分に対して逆関数を作成し、その右側にある他のモニカーの残りの部分を構成します。
アイテム モニカー このメソッドは、MK_E_NOTBINDABLEを返し、*ppmkRelPath を NULL に設定 します
OBJREF モニカー このメソッドは、E_NOTIMPLを返します。
ポインター モニカー このメソッドは、E_NOTIMPLを返します。
URL モニカー このメソッドは、E_NOTIMPLを返します。

要件

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

こちらもご覧ください

Imoniker

MonikerRelativePathTo