IMoniker::RelativePathTo 方法 (objidl.h)
建立這個Moniker與指定Moniker之間的相對Moniker。
語法
HRESULT RelativePathTo(
[in] IMoniker *pmkOther,
[out] IMoniker **ppmkRelPath
);
參數
[in] pmkOther
應該取得相對路徑之 Moniker上IMoniker 介面的指標。
[out] ppmkRelPath
IMoniker 指標變數的指標,可接收相對Moniker的介面指標。 成功時,實作必須在新的Moniker上呼叫 AddRef ;呼叫者必須負責呼叫 Release。 如果發生錯誤,實作會將 *ppmkRelPath 設定為 NULL。
傳回值
這個方法可以傳回標準傳回值E_OUTOFMEMORY和E_UNEXPECTED,以及下列值。
傳回碼 | 描述 |
---|---|
|
已成功完成命令。 |
|
ppmkRelPath 中傳回的 Moniker 和 ppmkOther 中傳回的 Moniker 不會共用任何常見的前置詞。 |
|
此Moniker是相對Moniker,例如專案Moniker。 這個Moniker必須以其容器的Moniker組成,才能判斷相對路徑。 |
備註
相對Moniker類似於相對路徑 (,例如 “.。\backup“) 。 例如,假設您有一個Moniker代表路徑「c:\projects\secret\art\pict1.bmp」,而另一個Moniker則代表路徑「c:\projects\secret\docs\chap1.txt」。 在第一個Moniker上呼叫 RelativePathTo ,以 pmkOther 參數傳遞第二個 Moniker,會建立代表路徑 “.. 的相對 Moniker。\docs\chap1.txt」。
來電者附註
Moniker 用戶端通常不需要呼叫 RelativePathTo。 這個方法主要是由連結對象的默認處理程式呼叫。 鏈接的物件同時包含絕對和相對Moniker來識別連結來源。 (如果使用者移動包含容器和來源檔案的目錄樹狀目錄,這會啟用連結追蹤。) 默認處理程式會呼叫此方法,以從容器檔建立相對Moniker至連結來源。 (也就是說,它會在識別容器檔的Moniker上呼叫 RelativePathTo ,並將識別連結來源的Moniker傳遞為 pmkOther 參數。)如果您呼叫 RelativePathTo,請只在絕對 Moniker 上呼叫它,例如,檔案 Moniker 或最左邊元件為檔案 Moniker 的複合 Moniker,其中檔案 Moniker 代表絕對路徑。 請勿在相對Moniker上呼叫這個方法。
實作者的注意事項
RelativePathTo 的實作應該先判斷 pmkOther 是否為您所辨識類別的 Moniker,例如,如果其屬於與這個 Moniker) 相同的類別,則可以提供特殊處理 (。 如果是,您的實作應該判斷相對路徑。 否則,它應該會在對 MonikerRelativePathTo 函式的呼叫中傳遞這兩個Moniker,以正確處理泛型大小寫。判斷相對路徑的第一個步驟是判斷這個Moniker和 pmkOther的通用前置詞。 下一個步驟是將此Moniker和 pmkOther 分成兩個部分,分別假設 (P、myTail) 和 (P、otherTail) ,其中 P 是常見的前置詞。 正確的相對路徑接著是 myTail 的反轉,由 otherTail 組成:
Comp ( Inv ( myTail ) ,otherTail )
其中 Comp () 代表組合作業,而 Inv () 代表反向作業。
針對特定類型的Moniker,您無法使用 IMoniker::Inverse 方法來建構 myTail 的反向。 例如,檔案Moniker會傳回反Moniker做為反向,而其 RelativePathTo 方法必須使用一或多個代表路徑 “.” 的檔案Moniker來建構 myTail 的反向。
實作特定附注
實作 | 備註 |
---|---|
反Moniker | 這個方法會傳回MK_S_HIM,並將 *ppmkRelPath 設定為另一個Moniker。 |
類別Moniker | 這個方法會傳回呼叫 MonikerRelativePathTo 的結果, 其 pmkSrc 等於這個Moniker、 pmkOther、 ppmkRelPath和 TRUE 做為 dwReserved。 |
檔案Moniker | 這個方法會計算Moniker,這個Moniker會在這個Moniker右側撰寫時產生另一個Moniker。 例如,如果這個Moniker的路徑是 「C:\work\docs\report.doc」,而另一個Moniker是「C:\work\art\picture.bmp」,則計算的Moniker路徑會是 “.\..\art\picture.bmp」。 |
泛型複合Moniker | 這個方法會尋找兩個Moniker的通用前置詞,並建立兩個Moniker,當移除一般前置詞時,會由其餘部分組成。 然後它會為此Moniker的其餘部分建立反轉,並在其右側撰寫其他Moniker的其餘部分。 |
專案Moniker | 此方法會傳回MK_E_NOTBINDABLE,並將 *ppmkRelPath 設定為 NULL。 |
OBJREF Moniker | 這個方法會傳回E_NOTIMPL。 |
指標 Moniker | 這個方法會傳回E_NOTIMPL。 |
URL Moniker | 這個方法會傳回E_NOTIMPL。 |
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | objidl.h |