IMAPISupport::DoCopyProps

适用于:Outlook 2013 | Outlook 2016

将对象的一个或多个属性复制或移动到另一个对象。

HRESULT DoCopyProps(
  LPCIID lpSrcInterface,
  LPVOID lpSrcObj,
  LPSPropTagArray lpIncludeProps,
  ULONG_PTR ulUIParam,
  LPMAPIPROGRESS lpProgress,
  LPCIID lpDestInterface,
  LPVOID lpDestObj,
  ULONG ulFlags,
  LPSPropProblemArray FAR * lppProblems
);

参数

lpSrcInterface

[in]指向接口标识符的指针 (IID) ,该接口表示用于访问具有要复制或移动的属性的 对象的接口。

lpSrcObj

[in]指向对象的指针,该对象包含要复制或移动的属性。

lpIncludeProps

[in]指向 SPropTagArray 结构的指针,该结构包含指示要复制或移动的属性标记的计数数组。 lpIncludeProps 参数不能为 NULL。

ulUIParam

[in]进度指示器的父窗口的句柄。

lpProgress

[in]指向进度指示器实现的指针。 如果在 lpProgress 参数中传递 NULL,则使用 MAPI 实现显示进度指示器。 除非在 ulFlags 参数中设置了 MAPI_DIALOG 标志,否则忽略 lpProgress 参数。

lpDestInterface

[in]指向接口标识符的指针,该接口标识符表示用于访问对象以接收复制或移动的属性的接口。

lpDestObj

[in]指向 对象的指针,用于接收复制或移动的属性。

ulFlags

[in]控制如何执行复制或移动操作的标志的位掩码。 可以设置以下标志:

MAPI_DIALOG

显示进度指示器。

MAPI_MOVE

DoCopyProps 应执行移动操作,而不是复制操作。 如果未设置此标志, DoCopyProps 将执行复制操作。

MAPI_NOREPLACE

不应覆盖目标对象中的现有属性。 如果未设置此标志, DoCopyProps 将覆盖现有属性。

lppProblems

[in,out]输入时,指向 指向 SPropProblemArray 结构的指针的指针;否则为 NULL,指示不需要错误信息。 如果 lppProblems 是输入上的有效指针, DoCopyProps 将返回有关复制一个或多个属性时出现的错误的详细信息。

返回值

S_OK

已成功复制或移动属性。

MAPI_E_COLLISION

要复制或移动的属性已存在于目标对象中,并设置了MAPI_NOREPLACE标志。

MAPI_E_FOLDER_CYCLE

源对象直接或间接包含目标对象。 在发现这种情况之前,可能已执行大量工作,因此源和目标对象可能会部分修改。

MAPI_E_INTERFACE_NOT_SUPPORTED

源对象不支持 lpSrcInterface 参数标识的接口,或者目标对象不支持 lpDestInterface 参数标识的接口。

MAPI_E_NO_ACCESS

尝试访问调用方权限不足的对象。 如果目标对象与源对象相同,则返回此错误。

以下值可以在 SPropProblemArray 结构中返回,但不能作为 DoCopyProps 的返回值。 这些错误适用于单个属性。

MAPI_E_BAD_CHARWIDTH

MAPI_UNICODE标志已设置, DoCopyProps 不支持 Unicode,或者未设置MAPI_UNICODE并且 DoCopyProps 仅支持 Unicode。

MAPI_E_COMPUTED

属性不能由调用方修改,因为它是一个只读属性,由目标对象的所有者计算。 此错误并不严重;调用方应允许复制操作继续。

MAPI_E_INVALID_TYPE

属性类型无效。

MAPI_E_UNEXPECTED_TYPE

属性类型不是调用方所需的类型。

备注

IMAPISupport::D oCopyProps 方法为消息存储提供程序支持对象实现。 消息存储提供程序可以调用 DoCopyProps 来为其文件夹和邮件实现 IMAPIProp::CopyProps 方法。 DoCopyProps 复制或移动 lpIncludeProps 指向的属性标记数组中标识的属性,这些属性存在于 lpSrcObj 指向的对象中。

给调用方的说明

在相同类型的对象(例如两条消息)之间复制属性时, lpSrcInterfacelpDestInterface 参数必须包含相同的接口标识符, 并且 lpSrcObjlpDestObj 参数必须指向同一类型的对象。 如果 lpDestInterface 设置为 NULL,DoCopyProps 将返回MAPI_E_INVALID_PARAMETER。 如果将 lpDestInterface 设置为可接受的接口标识符,但将 lpDestObj 设置为无效指针,则结果不可预知。 你的提供程序很可能失败。

如果不希望覆盖目标对象中的任何属性,请设置MAPI_NOREPLACE标志。 不会删除或修改源对象中存在且未覆盖的目标对象中的属性。

若要复制邮件的收件人列表,请将 PR_MESSAGE_RECIPIENTS (PidTagMessageRecipients) 属性包含在 lpIncludeProps 参数指向的属性标记数组中。 若要复制邮件的附件,请包含 PR_MESSAGE_ATTACHMENTS (PidTagMessageAttachments) 属性。

若要复制文件夹或通讯簿容器的层次结构或内容表,请在属性标记数组中包含 PR_CONTAINER_HIERARCHY (PidTagContainerHierarchy) 或 PR_CONTAINER_CONTENTS (PidTagContainerContents) 。 若要包含文件夹的关联内容表,请在数组中包含 PR_FOLDER_ASSOCIATED_CONTENTS (PidTagFolderAssociatedContents) 属性。

如果复制或移动了子文件夹,则无论 使用 SPropTagArray 结构指示的属性如何,其内容都会全部复制或移动。

DoCopyProps 报告与操作作为一个整体发生的全局错误,以及一个或多个属性所发生的单个错误。 这些单独的错误置于 SPropProblemArray 结构中。 可以通过为属性问题数组结构参数传递 NULL(而不是有效的指针)来抑制属性级别的错误报告。

如果要接收有关错误的信息,请在 lppProblems 参数中传递有效的 SPropProblemArray 结构指针。 当 DoCopyProps 返回S_OK时,检查结构中各个属性可能存在的错误。 当 DoCopyProps 返回错误时,SPropProblemArray 结构中不会返回任何信息。 请改为调用 IMAPISupport::GetLastError 方法来检索详细的错误信息。

如果 DoCopyProps 返回S_OK,则通过调用 MAPIFreeBuffer 函数释放返回的 SPropProblemArray 结构。

另请参阅

IMAPIProp::CopyProps

IMAPISupport::CopyMessages

IMAPISupport::DoCopyTo

IMAPISupport::GetLastError

PidTagContainerContents 规范属性

PidTagContainerHierarchy 规范属性

PidTagFolderAssociatedContents 规范属性

PidTagMessageAttachments 规范属性

PidTagMessageRecipients 规范属性

SPropProblemArray

SPropTagArray

IMAPISupport : IUnknown