MAPI 属性类型概述

适用于:Outlook 2013 | Outlook 2016

属性类型是由 MAPIDEFS 中的 MAPI 定义的常量。指示属性值的基础数据类型的 H 头文件。 所有属性(无论是由 MAPI、客户端应用程序还是服务提供程序定义)都使用这些类型之一。

属性类型遵循与用于属性标记的命名约定类似的命名约定。 许多属性类型具有单值和多值版本。 单值属性包含其类型的一个值,例如单个整数或字符串。 用于表示单值属性的常量有两部分:前缀PT_和描述实际类型的字符串,如 LONG 或 STRING8。

多值属性包含其类型的多个值。 与 OLE 变体数组不同,多值属性中的每个值都属于同一类型。 用于表示多值属性的常量是通过将 MV_FLAG 标志与表示基类型的相应单值常量组合在一起创建的。 有三部分:前缀PT_后跟MV_后跟描述类型的字符串。 例如,包含多个整数的属性的类型是PT_MV_LONG,对于多个字符串是PT_MV_STRING8。

下图显示了用于描述多值整数(类型为 PT_MV_LONG 的属性) 的 SPropValue 结构的结构。 成员已展开,以包括 属性中整数值的计数和指向这些值的数组的指针。

多值属性

多值属性

尽管对多值属性的支持是可选的,但 MAPI 建议客户端和服务提供程序支持这两种类型的属性,因为这样做可以在符合 MAPI 的组件之间实现更大的交互。

下图列出了所有不同的属性类型常量,其中显示了它们在 SPropValue 结构中的存储位置。 Value 成员的大小取决于特定类型。 请注意,并非所有单值类型都具有多值等效项。

属性类型常量

属性类型常量

使用属性的客户端和服务提供商需要执行两个步骤:

  1. 确定属性是可用还是不可用。

  2. 如果可用,请检索属性的值。

有时,客户端或服务提供商只需要检查属性的存在;其他时候,需要为特定值检查。 例如,传输提供程序有三个不同的操作过程来处理 PR_SEND_RICH_INFO (PidTagSendRichInfo) 属性,一个布尔值,指示是否应使用格式化文本传输消息。 如果 PR_SEND_RICH_INFO 设置为 TRUE,则传输提供程序将传输格式化的文本。 如果设置为 FALSE,则格式化文本在传输前将被丢弃。 如果 PR_SEND_RICH_INFO 不可用,则传输提供程序将遵循其默认操作过程,无论该操作对于特定提供程序而言如何。

MAPI 定义了一种特殊的属性类型,PT_UNSPECIFIED,当属性类型未知时,客户端或服务提供程序可以使用该类型检索属性。若要在不事先了解其类型的情况下检索属性,客户端或服务提供程序调用对象的 IMAPIProp::GetProps 方法,并传递由属性的标识符和PT_UNSPECIFIED属性类型组成的属性标记。 GetProps 返回 属性的 SPropValue 结构,将 PT_UNSPECIFIED 替换为相应的类型。 实现 GetProps 的服务提供商需要支持PT_UNSPECIFIED。

某些 MAPI 对象支持本身是对象的属性。 对象属性的类型为 PT_OBJECT。 客户端和服务提供程序通常使用 IMAPIProp::OpenProperty 方法(指定适当的访问接口)或对象上支持属性的方法,而不是使用 IMAPIProp::GetProps 访问这些属性。

由于访问对象属性的值涉及使用对象的接口之一, 因此 GetProps 不合适。 使用 GetProps,调用方通过 SPropValue 结构访问属性的值。 使用 IMAPIProp::OpenProperty,调用方检索指向可以访问 对象的接口的指针。 OpenProperty 始终可用于检索对象属性。 另一个选项(对 对象调用方法)并非每个对象属性都可用。

例如,每个文件夹都支持两个表:一个层次结构表和一个内容表。 这些表是 文件夹的属性;其属性标记 PR_CONTAINER_HIERARCHY (PidTagContainerHierarchy) 和 PR_CONTAINER_CONTENTS (PidTagContainerContents) 。 表是需要 IMAPITable 接口进行访问的对象。 客户端可以调用文件夹的 IMAPIContainer::GetHierarchyTable 方法来访问层次结构表,调用文件夹的 IMAPIContainer::GetContentsTable 方法来访问内容表,或调用文件夹的 IMAPIProp::OpenProperty 方法来访问任一表。 若要调用 OpenProperty,客户端将属性的属性标记作为第一个参数传递,并将用于访问的接口的接口标识符作为第二个参数传递。 这些参数将 PR_CONTAINER_HIERARCHYPR_CONTAINER_CONTENTSIID_IMAPITable

有关单值和多值属性类型的完整列表,请参阅 属性类型

另请参阅