IMAPIProp::GetProps

适用于:Outlook 2013 | Outlook 2016

检索对象的一个或多个属性的属性值。

HRESULT GetProps(
  LPSPropTagArray lpPropTagArray,
  ULONG ulFlags,
  ULONG FAR * lpcValues,
  LPSPropValue FAR * lppPropArray
);

参数

lpPropTagArray

[in]指向属性标记数组的指针,这些标记标识要检索其值的属性。 lpPropTagArray 参数必须为 NULL,指示应返回对象的所有属性的值,或指向包含一个或多个属性标记的 SPropTagArray 结构。

ulFlags

[in]标志的位掩码,指示类型为PT_UNSPECIFIED的属性的格式。 可以设置以下标志:

MAPI_UNICODE

应以 Unicode 格式返回这些属性的字符串值。 如果未设置MAPI_UNICODE标志,则应以 ANSI 格式返回字符串值。

lpcValues

[out]指向 lppPropArray 参数指向的属性值计数的指针。 如果 lppPropArray 为 NULL,则 lpcValues 参数的内容为零。

lppPropArray

[out]指向指向检索的属性值的指针的指针。

返回值

S_OK

已成功检索属性值。

MAPI_W_ERRORS_RETURNED

调用总体成功,但无法访问一个或多个属性。 每个不可用属性的属性值的 aulPropTag 成员具有PT_ERROR属性类型,标识符为零。 返回此警告时,应将调用处理为成功。 若要测试此警告,请使用 HR_FAILED 宏。 有关详细信息,请参阅 使用宏进行错误处理

MAPI_E_INVALID_PARAMETER

lpPropTagArray 指向的 SPropTagArray 结构的 cValues 成员传递了零。

备注

IMAPIProp::GetProps 方法获取对象的一个或多个属性的属性值。

属性值的返回顺序与请求的顺序相同 (也就是说, lpPropTagArray 指向的属性标记数组中的属性顺序与 lppPropArray) 指向的属性值结构数组中的顺序匹配。

属性标记数组的 aulPropTag 成员中指定的属性类型指示应在每个属性值结构的 Value 成员中返回的值的类型。 但是,如果调用方不知道属性的类型,则可以将 aulPropTag 成员中的类型改为PT_UNSPECIFIED。 在检索值时, GetProps 在属性的属性值结构的 aulPropTag 成员中设置正确的类型。

如果在 lpPropTagArray 的 SPropTagArray 中指定了属性类型,则 lppPropArray 中返回的 SPropValue 中的属性值具有与请求的类型完全匹配的类型,除非改为返回错误值。

字符串属性可以有两种属性类型之一:PT_UNICODE表示 Unicode 格式,PT_STRING8表示 ANSI 格式。 如果在 ulFlags 参数中设置了 MAPI_UNICODE 标志,则每当 GetProps 无法确定字符串属性的相应格式时,它将返回 Unicode 格式的值。 在以下情况下,GetProps 无法确定确切的字符串属性类型:

  • lpPropTagArray 参数设置为 NULL 以请求所有属性。

  • aulPropTag 成员将值PT_UNSPECIFIED作为其属性类型包含在属性标记数组中。

如果 lpPropTagArray 参数设置为 NULL 以检索对象的所有属性且不存在任何属性, 则 GetProps 将执行以下操作:

  • 返回S_OK。

  • 将属性值结构的 cValues 成员中的计数值设置为 0。

  • lpcValues 的内容设置为 0。

  • lppPropArray 设置为 NULL。

GetProps 不得返回 cValues 设置为 0 的多值属性。

针对实现者的说明

调用 MAPIAllocateBuffer 函数,最初为 lpPropTagArray 指向的 SPropValue 结构分配内存;调用 MAPIAllocateMore 以分配结构成员所需的任何其他内存。

如果无法检索一个或多个请求的属性的值,则返回MAPI_W_ERRORS_RETURNED。 在属性值结构中,将 aulPropTag 成员中的类型设置为 PT_ERROR, 将 Value 成员设置为描述错误的状态代码。 例如,如果必须将字符串转换为 Unicode 且不支持 Unicode,请将 Value 成员设置为 MAPI_E_BAD_CHARWIDTH。 如果属性太大,请将其设置为 MAPI_E_NOT_ENOUGH_MEMORY。 如果 对象不支持 属性,请将其设置为 MAPI_E_NOT_FOUND。

远程传输提供程序的 GetProps 方法实现必须返回调用方请求的属性的文件夹属性值。 实现必须执行以下操作:

  • 分配属性值数组以返回到调用方,并将其地址存储在为此传入的属性值指针参数中。

  • 根据传递给 GetProps 的属性标记数组,将文件夹的属性标记复制到属性值数组中的属性标记中。

  • 确保为传递给 GetProps 的所有属性标记设置属性类型。 调用方可以传入 PT_UNSPECIFIED 的属性类型,在这种情况下 ,GetProps 必须为该属性标记设置正确的属性类型。

  • 根据属性值数组的标记设置属性值数组中每个属性的值。 例如,如果调用方请求的属性标记 PR_OBJECT_TYPE (PidTagObjectType) , 则 GetProps 可以将值设置为MAPI_FOLDER。

  • 如果调用方传入了你的实现未处理的任何属性标记,则可以将属性标记设置为这些属性PT_ERROR,并将属性值设置为MAPI_E_NOT_FOUND。

  • 如果未发生错误,则返回S_OK;如果发生错误,则返回MAPI_W_ERRORS_RETURNED。

远程传输提供程序的 GetProps 方法实现必须至少支持以下属性:

给调用方的说明

对于类型为 PT_OBJECT 的属性,请调用 IMAPIProp::OpenProperty 方法,而不是 GetProps

对于安全属性,不要期望通过调用将 lppPropTagArray 参数设置为 NULL 的 GetProps 来检索它们。 调用 GetProps 时,必须在其属性标记数组的 aulPropTag 成员中显式设置安全 属性的标识符。 何时以及如何提供安全属性由服务提供商决定。

仅当 GetProps 返回S_OK或MAPI_W_ERRORS_RETURNED时,才通过调用 MAPIFreeBuffer 函数来释放返回的 SPropValue 结构。

如果 GetProps 返回MAPI_W_ERRORS_RETURNED,因为它无法访问一个或多个属性,检查返回的属性标记。 失败的属性将在其属性值结构中设置以下值:

  • aulPropTag 成员中的属性类型设置为 PT_ERROR。

  • Value 成员中的属性值设置为错误的状态代码,例如MAPI_E_NOT_FOUND。

如果属性因太大而无法方便地在属性值结构中返回,则其 Value 成员设置为MAPI_E_NOT_ENOUGH_MEMORY。 通常,当属性的值为 4 KB 或更大时,PT_STRING8、PT_UNICODE或PT_BINARY类型的字符串或二进制属性会出现这种情况。 调用 IMAPIProp::OpenProperty 以检索大型属性。

并非所有 GetProps 实现都支持字符串的 Unicode 和 ANSI 格式。 当特定属性需要字符串格式转换并且 GetProps 不支持它时,该属性的 Value 成员将设置为 MAPI_E_BAD_CHARWIDTH。

若要检查 PST 是否为 SharePoint PST,请使用 IMAPISession::OpenMsgStore 装载 PST,然后在请求此属性的消息存储对象上调用 GetProps。 如果存在,可以假定已为 SharePoint 配置 PST;如果不是,则 PST 尚未配置为 SharePoint PST。

有关如何使用 GetProps 访问属性的详细信息,请参阅 检索 MAPI 属性

MFCMAPI 引用

有关 MFCMAPI 示例代码,请参阅下表。

文件 函数 Comment
MAPIFunctions.cpp
GetPropsNULL
MFCMAPI 使用 IMAPIPropProp::GetProps 方法在 lpPropTagArray 参数中传递 NULL 或 IMAPIPropProp::GetPropList 方法返回的数组来获取对象的所有属性。

另请参阅

IMAPIProp::GetPropList

IMAPIProp::OpenProperty

MAPIAllocateBuffer

MAPIAllocateMore

MAPIFreeBuffer

SPropTagArray

SPropValue

IMAPIProp : IUnknown

MFCMAPI 代码示例

检索 MAPI 属性

使用宏进行错误处理