IMAPISupport::DoCopyTo

适用于:Outlook 2013 | Outlook 2016

将一个对象的所有属性(特排除的属性除外)复制或移动到另一个对象。

HRESULT DoCopyTo(
  LPCIID lpSrcInterface,
  LPVOID lpSrcObj,
  ULONG ciidExclude,
  LPCIID rgiidExclude,
  LPSPropTagArray lpExcludeProps,
  ULONG_PTR ulUIParam,
  LPMAPIPROGRESS lpProgress,
  LPCIID lpDestInterface,
  LPVOID lpDestObj,
  ULONG ulFlags,
  LPSPropProblemArray FAR * lppProblems
);

参数

lpSrcInterface

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

lpSrcObj

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

ciidExclude

[in]复制或移动属性时要排除的接口计数。

rgiidExclude

[in]接口标识符数组,指示在将补充信息复制或移动到目标对象时不应使用的接口。

lpExcludeProps

[in]指向属性标记数组的指针,该数组标识应从复制或移动操作中排除的属性标记。 在 lpExcludeProps 参数中传递 NULL 表示应复制或移动对象的所有属性。 当 lpExcludeProps 指向的 SPropTagArray 结构的 cValues 成员设置为 0 时,DoCopyTo 将返回MAPI_E_INVALID_PARAMETER。

ulUIParam

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

lpProgress

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

lpDestInterface

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

lpDestObj

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

ulFlags

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

MAPI_DIALOG

显示进度指示器。

MAPI_MOVE

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

MAPI_NOREPLACE

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

lppProblems

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

返回值

S_OK

已成功复制或移动属性。

MAPI_E_COLLISION

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

MAPI_E_FOLDER_CYCLE

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

MAPI_E_INTERFACE_NOT_SUPPORTED

lpSrcObj 指向的对象不支持 lpSrcInterface 参数标识的接口,或者 lpDestObj 指向的对象不支持 lpDestInterface 参数标识的接口。

MAPI_E_NO_ACCESS

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

MAPI_E_INVALID_PARAMETER

lpSrcInterface 参数为 NULL。

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

MAPI_E_BAD_CHARWIDTH

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

MAPI_E_COMPUTED

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

MAPI_E_INVALID_TYPE

属性类型无效。

MAPI_E_UNEXPECTED_TYPE

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

备注

IMAPISupport::D oCopyTo 方法为消息存储提供程序支持对象实现。 消息存储提供程序可以调用 DoCopyTo 来为其文件夹和邮件实现 IMAPIProp::CopyTo 方法。

默认情况下, DoCopyTo 将一个对象的所有属性复制或移动到另一个对象。 源对象中的任何子对象都会自动包含在操作中,并全部复制或移动。

如果目标对象中已存在任何复制或移动的属性,则新属性将覆盖现有属性,除非在 ulFlags 参数中设置了 MAPI_NOREPLACE 标志。 目标对象中未覆盖的现有信息保持不变。

给调用方的说明

若要从复制或移动操作中排除属性,请在 lpExcludeProps 参数中包含其属性标记。 如果传递使用 PROP_TAG 宏从属性标记数组中的特定标识符生成属性标记的结果,则将排除具有该标识符的所有属性。 例如,属性标记数组中的以下条目会导致排除标识符为 0x8002 的所有属性,而不考虑类型:

PROP_TAG(PT_LONG, 0x8002)

若要避免在将邮件复制到其他文件夹时复制邮件的传递时间,请在属性标记 exclude 数组中指定 PR_MESSAGE_DELIVERY_TIME (PidTagMessageDeliveryTime) 。 若要排除邮件的收件人列表,请将 PR_MESSAGE_RECIPIENTS (PidTagMessageRecipients) 属性添加到 exclude 数组。 若要排除邮件的附件,请将 PR_MESSAGE_ATTACHMENTS (PidTagMessageAttachments) 属性添加到数组。

同样,若要防止复制或移动文件夹或通讯簿容器的层次结构或内容表,请在属性标记排除数组中包含 PR_CONTAINER_HIERARCHY (PidTagContainerHierarchy) 或 PR_CONTAINER_CONTENTS (PidTagContainerContents) 。

忽略 lppProblems 参数的 SPropProblemArray 结构中返回的MAPI_E_COMPUTED错误。

lpSrcInterface 指向的接口标识符通常与 lpDestInterface 指向的接口标识符相同。

如果在 lpDestInterface 中传递可接受的接口标识符,但在 lpDestObj 中传递的指针无效,则结果不可预测。 这很可能会导致提供程序失败。

相反,如果知道不应复制或移动的补充信息,请在 rgiidExclude 参数中传递的数组中添加要排除的接口的接口标识符。 例如,如果要复制邮件,但不复制其任何邮件附件,请在 rgiidExclude 数组中传递IID_IMessage。 DoCopyTo 忽略 rgiidExclude 中列出的任何它无法识别的接口。

使用 rgiidExclude 参数排除接口时,它还排除从该接口派生的所有接口。 例如,排除 IMAPIContainer 接口会导致排除文件夹或通讯簿容器,具体取决于提供程序的类型。 不要排除 IMAPIPropIUnknown ,因为有这么多接口派生自它们。

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

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

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

如果在 DoCopyTo 调用上发生全局错误,请不要使用或释放 SPropProblemArray 结构。 提供程序应忽略 DoCopyTo 返回的 SPropProblemArray 结构中的 ulIndex 成员。

另请参阅

IMAPIProp::CopyTo

IMAPISupport::CopyFolder

IMAPISupport::CopyMessages

IMAPISupport::GetLastError

PidTagContainerContents 规范属性

PidTagContainerHierarchy 规范属性

PidTagMessageAttachments 规范属性

PidTagMessageDeliveryTime 规范属性

PidTagMessageRecipients 规范属性

SPropProblemArray

SPropTagArray

IMAPISupport : IUnknown