IMAPIProp::SetProps
適用於:Outlook 2013 |Outlook 2016
匯報 一或多個屬性。
HRESULT SetProps(
ULONG cValues,
LPSPropValue lpPropArray,
LPSPropProblemArray FAR * lppProblems
);
參數
cValues
[in] lpPropArray 參數所指向的屬性值計數。 cValues 參數不得為 0。
lpPropArray
[in] SPropValue 結構陣列的指標,其中包含要更新的屬性值。
lppProblems
[in, out]在輸入時, 指向 SPropProblemArray 結構指標的指標;否則為 NULL,表示不需要錯誤資訊。 如果 lppProblems 是輸入的有效指標, SetProps 會傳回更新一或多個屬性時發生錯誤的詳細資訊。
傳回值
S_OK
屬性已成功更新。
下列值可以在 SPropProblemArray 結構中傳回,但不能作為 SetProps 的傳回值:
MAPI_E_BAD_CHARWIDTH
已設定MAPI_UNICODE旗標,且實作不支援 Unicode,或未設定MAPI_UNICODE,且實作僅支援 Unicode。
MAPI_E_COMPUTED
無法更新 屬性,因為它是唯讀的,由負責對象的服務提供者計算。
MAPI_E_INVALID_TYPE
屬性類型無效。
MAPI_E_NO_ACCESS
嘗試修改唯讀物件,或存取用戶沒有足夠的許可權的物件。
MAPI_E_NOT_ENOUGH_MEMORY
無法更新 屬性,因為它大於遠端過程調用 (RPC) 緩衝區大小。
MAPI_E_UNEXPECTED_TYPE
屬性類型不是呼叫實作所預期的類型。
實作者注意事項
忽略 PR_NULL (PidTagNull) 屬性標籤,以及所有類型為 PT_ERROR 的屬性。 請勿在 SPropProblemArray 結構中進行變更或報告問題。
如果屬性值陣列中包含PT_OBJECT類型的屬性,則 傳回MAPI_E_INVALID_PARAMETER 。 如果陣列中包含多重值屬性,且其 cValues 成員設定為 0,則也會傳回此錯誤。
如果呼叫整體成功,但設定某些屬性時發生問題,請傳回S_OK,並將問題的相關信息放在 lppProblems 參數所指向之 SPropProblemArray 結構的適當專案中。
呼叫者注意事項
視服務提供者而定,您也可以傳遞屬性標籤來變更屬性類型,其中包含與先前搭配指定屬性識別碼使用的不同類型。
如果您針對 物件不支援的屬性包含屬性標籤,且 SetProps 的實作允許建立新的屬性,則會將 屬性新增至物件。 會捨棄與用於新屬性之屬性標識符一起儲存的任何先前值。
請注意,S_OK傳回值並不保證所有屬性都已成功更新。 某些提供者會快取 SetProps 呼叫,直到收到需要提供者介入的呼叫,例如 IMAPIProp::SaveChanges 或 IMAPIProp::GetProps。 因此,可以接收與 SetProps 呼叫相關的錯誤值,以及後續的呼叫。
如果 SetProps 傳回S_OK,請檢查 lppProblems 所指向的 SPropProblemArray 結構是否有更新個別屬性的問題。 如果 SetProps 傳回錯誤,請勿檢查屬性問題陣列。 請改為呼叫物件的 IMAPIProp::GetLastError 方法。
更新大型屬性時, SetProps 可能會失敗並傳回MAPI_E_NOT_ENOUGH_MEMORY。 屬性沒有大小上限,而且不同的物件可以有不同的限制。 如果您處理潛在的大型屬性,如果 SetProps 傳回此錯誤值,請準備好呼叫 IMAPIProp::OpenProperty 方法,並以IID_IStream作為介面標識符。
呼叫 MAPIFreeBuffer 函式以釋放 SPropProblemArray 結構。
MFCMAPI 參考
如需 MFCMAPI 範例程式代碼,請參閱下表。
檔案 | Function | Comment |
---|---|---|
PropertyEditor.cpp |
CPropertyEditor::WriteSPropValueToObject |
在編輯屬性之後,MFCMAPI 會使用 IMAPIProp::SetProps 方法將屬性寫回物件。 |