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::SaveChangesIMAPIProp::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 示例代码,请参阅下表。

文件 函数 Comment
PropertyEditor.cpp
CPropertyEditor::WriteSPropValueToObject
编辑属性后,MFCMAPI 使用 IMAPIProp::SetProps 方法将属性写回到对象。

另请参阅

IMAPIProp::GetLastError

IMAPIProp::GetProps

IMAPIProp::OpenProperty

IMAPIProp::SaveChanges

MAPIFreeBuffer

SPropProblemArray

SPropValue

IMAPIProp : IUnknown