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 指向的对象中。
给调用方的说明
在相同类型的对象(例如两条消息)之间复制属性时, lpSrcInterface 和 lpDestInterface 参数必须包含相同的接口标识符, 并且 lpSrcObj 和 lpDestObj 参数必须指向同一类型的对象。 如果 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 结构。