IMoniker::CommonPrefixWith 方法 (objidl.h)

根據這個Moniker與指定Moniker共通的前置詞,建立新的Moniker。

語法

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

參數

[in] pmkOther

要與這個Moniker比較的另一個Moniker介面上 IMoniker 介面的指標,以判斷是否有通用前置詞。

[out] ppmkPrefix

IMoniker* 指標變數的位址,該變數會接收此 Moniker 和 pmkOther 常見前置詞的 Moniker 介面指標。 成功時,實作必須在產生的Moniker上呼叫 AddRef ;呼叫者必須負責呼叫 Release。 如果發生錯誤或沒有常見的前置詞,實作應該將 *ppmkPrefix 設定為 NULL

傳回值

這個方法可以傳回標準傳回值E_OUTOFMEMORY,以及下列值。

傳回碼 描述
S_OK
常見的前置詞不存在於此 Moniker 或 pmkOther
MK_S_NOPREFIX
沒有常見的前置詞存在。
MK_S_HIM
整個 pmkOther 是這個 Moniker 的前置詞。
MK_S_US
這兩個Moniker完全相同。
MK_S_ME
此 Moniker 是 pmkOther moniker 的前置詞。
MK_S_NOTBINDABLE
這個方法是在相對Moniker上呼叫。 在相對Moniker上採用通用前置詞並不有意義。

備註

CommonPrefixWith 會 建立新的 Moniker,其中包含這個 Moniker 物件和其他 Moniker 上 Moniker 的通用前置詞。 例如,如果一個Moniker代表路徑 c:\projects\secret\art\pict1.bmp c:\projects\secret\docs\chap1.txt”

來電者附註

CommonPrefixWith 方法主要是在 IMoniker::RelativePathTo 方法的實作中呼叫。 使用Moniker尋找物件很少需要呼叫這個方法的用戶端。

只有在 pmkOther 和這個 Moniker 都是絕對 Moniker 時,才呼叫這個方法。 絕對Moniker是檔案Moniker或泛型複合,其最左邊的元件是代表絕對路徑的檔案Moniker。 請勿在相對Moniker上呼叫這個方法,因為它不會產生有意義的結果。

實作者的注意事項

您的實作應該先判斷 pmkOther 是否為您所辨識類別的 Moniker,例如,如果它與這個 Moniker) 相同,則可以提供特殊處理 (。 如果是,您的實作應該判斷兩個Moniker的通用前置詞。 否則,它應該在對 MonikerCommonPrefixWith 函式的呼叫中傳遞這兩個Moniker,以正確處理泛型大小寫。

實作特定附注

實作 備註
反Moniker 如果另一個Moniker也是反Moniker,此方法會傳回 MK_S_US,並將 ppmkPrefix 設定為此Moniker。 否則,方法會呼叫 MonikerCommonPrefixWith 函式。 此函式可正確處理其他Moniker是泛型複合的案例。
類別Moniker 如果 pmkOther 等於這個 Moniker,則擷取這個 Moniker 的指標,並傳回MK_S_US。 如果 pmkOther 是類別 Moniker,但不等於這個 Moniker,則會傳回MK_E_NOPREFIX。 否則,傳回以 pmkThispmkOtherppmkPrefix 的形式呼叫 MonikerCommonPrefixWith 的結果,以處理 pmkOther 是泛型複合 Moniker 的情況。
檔案Moniker 如果兩個Moniker都是檔案Moniker,這個方法會傳回以兩個檔案Moniker開頭的一般元件為基礎的檔案Moniker。 檔案 Moniker 的元件可以是下列類型:
  • \\server\share 格式的計算機名稱。 計算機名稱會被視為單一元件,因此代表路徑 “\\myserver\public\work” 和 “\\myserver\private\games” 的兩個 Moniker 沒有 “\\myserver” 做為通用前置詞。
  • 磁碟驅動器指定 (例如 「C:“) 。
  • 目錄或檔名。
如果另一個Moniker不是檔案Moniker,這個方法會在呼叫 MonikerCommonPrefixWith 函式時傳遞這兩個Moniker。 此函式可正確處理其他Moniker是泛型複合的案例。

如果沒有常見的前置詞,這個方法會傳回MK_E_NOPREFIX。

泛型複合Moniker 如果另一個Moniker是複合的,這個方法會比較每個複合的元件,從左至右。 傳回的通用前置詞 Moniker 也可能是複合 Moniker,視這兩個 Moniker 共通的元件數目而定。 如果另一個Moniker不是複合,則方法只會將它與這個Moniker的最左邊元件進行比較。

如果Moniker相等,此方法會傳回MK_S_US,並將 ppmkPrefix 設定為這個Moniker。 如果另一個 Moniker 是這個 Moniker 的前置詞,此方法會傳回 MK_S_HIM,並將 ppmkPrefix 設定為另一個 Moniker。 如果這個Moniker是另一個的前置詞,這個方法會傳回MK_S_ME,並將 ppmkPrefix 設定為這個Moniker。

如果沒有常見的前置詞,此方法會傳回 MK_E_NOPREFIX,並將 ppmkPrefix 設定為 NULL

專案Moniker 如果另一個Moniker是等於這個Moniker的專案Moniker,這個方法會將 *ppmkPrefix 設定為此Moniker,並傳回MK_S_US;否則,方法會呼叫 MonikerCommonPrefixWith 函式。 此函式可正確處理其他Moniker是泛型複合的案例。
OBJREF Moniker 如果兩個Moniker相等,此方法會傳回MK_S_US,並將 *ppmkPrefix 設定為 NULL。 如果另一個 Moniker 不是 OBJREF Moniker,這個方法會將這兩個 Moniker 傳遞至 MonikerCommonPrefixWith 函式。 此函式可正確處理其他Moniker是泛型複合的案例。

如果沒有常見的前置詞,這個方法會傳回MK_E_NOPREFIX。

指標 Moniker 如果兩個Moniker相等,這個方法會傳回MK_S_US,並將 *ppmkPrefix 設定為此Moniker。 否則,方法會傳回MK_E_NOPREFIX,並將 *ppmkPrefix 設定為 NULL
URL Moniker 這個方法會傳回E_NOTIMPL。

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 objidl.h

另請參閱

IMoniker

MonikerCommonPrefixWith