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,以及下列值。
傳回碼 | 描述 |
---|---|
|
常見的前置詞不存在於此 Moniker 或 pmkOther。 |
|
沒有常見的前置詞存在。 |
|
整個 pmkOther 是這個 Moniker 的前置詞。 |
|
這兩個Moniker完全相同。 |
|
此 Moniker 是 pmkOther moniker 的前置詞。 |
|
這個方法是在相對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。 否則,傳回以 pmkThis、pmkOther 和 ppmkPrefix 的形式呼叫 MonikerCommonPrefixWith 的結果,以處理 pmkOther 是泛型複合 Moniker 的情況。 |
檔案Moniker |
如果兩個Moniker都是檔案Moniker,這個方法會傳回以兩個檔案Moniker開頭的一般元件為基礎的檔案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 |