IMoniker::Reduce 方法 (objidl.h)

將Moniker縮減為最簡單的形式。

語法

HRESULT Reduce(
  [in]      IBindCtx *pbc,
  [in]      DWORD    dwReduceHowFar,
  [in, out] IMoniker **ppmkToLeft,
  [out]     IMoniker **ppmkReduced
);

參數

[in] pbc

系結內容上要用於這個系結作業之 IBindCtx 介面的指標。 系結內容會在系結程式期間快取系結的物件、包含使用系結內容套用至所有作業的參數,並提供Moniker實作應該擷取其環境相關信息的方法。

[in] dwReduceHowFar

指定這個 Moniker 應該縮減的程度。 此參數必須是 MKRREDUCE 列舉中的其中一個值。

[in, out] ppmkToLeft

在專案上, IMoniker 指標變數的指標,其中包含這個Moniker左邊的Moniker介面指標。 此參數主要是由Moniker實作者用來啟用複合Moniker的各種元件之間的合作;Moniker 用戶端通常可以傳遞 NULL

傳回時,*ppmkToLeft 通常會設定為 NULL,表示原始 Moniker 在左側沒有變更。 在罕見的情況下,*ppmkToLeft 表示 Moniker,表示應該忽略左邊的上一個 Moniker,而透過 *ppmkToLeft 傳回的 Moniker 是取代專案。 在這種情況下,實作必須在這個Moniker左邊的舊Moniker上呼叫 Release ,而且必須在傳回的新Moniker上呼叫 AddRef ;呼叫端稍後必須釋放它。 如果發生錯誤,實作可能會讓介面指標保持不變,或將其設定為 NULL

[out] ppmkReduced

IMoniker 指標變數的指標,可接收這個Moniker縮減格式的介面指標,如果發生錯誤,或是此Moniker減少為無,則可為NULL。 如果無法減少此 Moniker,*ppmkReduced 只會設定為此 Moniker,且傳回值會MK_S_REDUCED_TO_SELF。 如果 *ppmkReduced 不是 NULL,則實作必須在新的 Moniker 上呼叫 AddRef ;呼叫者必須負責呼叫 Release。 (即使 *ppmkReduced 設定為此 moniker.) 也是如此

傳回值

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

傳回碼 描述
S_OK
已成功完成命令。
MK_S_REDUCED_TO_SELF
此 Moniker 無法進一步減少,因此 ppmkReduced 表示此 Moniker。
MK_E_EXCEEDEDDEADLINE
作業無法在系結內容的 BIND_OPTS 結構所指定的時間限制內完成。

備註

這個方法適用於下列用途:

  • 啟用將使用者定義宏或別名建構為新種類的Moniker類別。 減少時,會傳回宏所評估的Moniker。
  • 啟用一種Moniker的建構,可在數據移動時追蹤數據。 減少時,會傳回目前位置中數據的Moniker。
  • 在支援標識符型方法的文件系統上,存取與檔名無關的檔案;檔案Moniker可以縮減為包含其中一個標識碼的Moniker。
在 dwReduceHowFar 參數中傳遞之 MKRREDUCE 旗標的意圖,是要提供以程式設計方式將 Moniker 縮減為可辨識用戶的表單。 例如,檔案系統中的路徑、文字處理檔中的書籤,以及電子錶格中的範圍名稱全都可辨識給使用者。 相反地,用戶無法辨識封裝在Moniker中的宏或別名。

來電者附註

上述案例目前不是由系統提供的Moniker類別實作。

您應該先呼叫 Reduce ,再使用 IMoniker::IsEqual 方法來比較兩個 Moniker,因為縮減的 Moniker 是其最特定的形式。 IsEqual 可能會在兩個 Moniker 減少之前傳回S_FALSE,並在減少之後傳回S_OK。

實作者的注意事項

如果目前的Moniker可以減少,您的實作不得就地減少Moniker。 相反地,它必須傳回新的Moniker,代表目前狀態的縮減狀態。 如此一來,呼叫端仍可選擇使用非引發的Moniker (,例如列舉其元件) 。 您的實作至少應盡可能減少Moniker。

實作特定附注

實作 備註
反Moniker 這個方法會傳回MK_S_REDUCED_TO_SELF,並傳回相同的Moniker。
類別Moniker 這個方法會傳回MK_S_REDUCED_TO_SELF,並傳回相同的Moniker。
檔案Moniker 這個方法會傳回MK_S_REDUCED_TO_SELF,並傳回相同的Moniker。
泛型複合Moniker 這個方法會針對每個元件Moniker以遞歸方式呼叫 Reduce 。 如果有任何元件自行減少,此方法會傳回S_OK,並傳回縮減元件的複合。 如果未發生縮減,方法會傳回相同的Moniker,並傳回MK_S_REDUCED_TO_SELF。
專案Moniker 這個方法會傳回MK_S_REDUCED_TO_SELF,並傳回相同的Moniker。
OBJREF Moniker 這個方法會傳回MK_S_REDUCED_TO_SELF,並傳回相同的Moniker。
指標 Moniker 這個方法會傳回MK_S_REDUCED_TO_SELF,並傳回相同的Moniker。
URL Moniker 這個方法會傳回MK_S_REDUCED_TO_SELF,並傳回相同的Moniker。

規格需求

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

另請參閱

IMoniker