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標準の戻り値と、次の値を返すことができます。
リターン コード | 説明 |
---|---|
|
メソッドは正常に完了しました。 |
|
2 つのモニカーで共通のプレフィックスが共有されておらず、 ppmkRelPath で返されるモニカーは pmkOther です。 |
|
このモニカーは、アイテム モニカーなどの相対的なモニカーです。 このモニカーは、相対パスを決定する前に、コンテナーのモニカーで構成する必要があります。 |
注釈
相対モニカーは、相対パス (. など) に似ています。\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、TRUE を dwReserved として 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 |