IABLogon::OpenEntry
适用于:Outlook 2013 | Outlook 2016
打开容器、消息用户或通讯组列表,并返回指向接口实现的指针,以提供进一步的访问。
HRESULT OpenEntry(
ULONG cbEntryID,
LPENTRYID lpEntryID,
LPCIID lpInterface,
ULONG ulFlags,
ULONG FAR * lpulObjType,
LPUNKNOWN FAR * lppUnk
);
参数
cbEntryID
[in] lpEntryID 参数指向的条目标识符中的字节计数。
lpEntryID
[in]指向要打开的容器、消息用户或通讯组列表的条目标识符的指针。
lpInterface
[in]指向接口标识符的指针 (IID) ,表示用于访问打开对象的接口。 传递 NULL 将返回对象的标准接口的标识符。 对于容器,标准接口为 IABContainer:IMAPIContainer。 通讯簿对象的标准接口是用于通讯组列表的 IDistList : IMAPIContainer 和 IMailUser :消息用户的 IMAPIProp 。
ulFlags
[in]控制对象打开方式的标志的位掩码。 可以设置以下标志:
MAPI_BEST_ACCESS
请求使用用户允许的最大网络权限和客户端应用程序的最大访问权限打开对象。 例如,如果客户端具有读/写权限,则应使用读/写权限打开对象;如果客户端具有只读权限,则应使用只读权限打开对象。
MAPI_DEFERRED_ERRORS
允许 OpenEntry 方法成功返回,可能是在调用客户端完全访问对象之前。 如果未访问对象,则进行后续对象调用可能会引发错误。
MAPI_MODIFY
请求读/写权限。 默认情况下,对象以只读访问权限打开,客户端不应假定已授予读/写权限。
lpulObjType
[out]指向打开的对象类型的指针。
lppUnk
[out]指向打开对象的指针的指针。
备注
S_OK
已成功打开对象。
MAPI_E_NO_ACCESS
用户没有足够的权限打开对象,或者尝试打开具有读/写权限的只读对象。
MAPI_E_NOT_FOUND
lpEntryID 指定的条目标识符不表示 对象。
MAPI_E_UNKNOWN_ENTRYID
lpEntryID 参数中的条目标识符不是通讯簿提供程序识别的格式。
MAPI 调用 OpenEntry 方法以打开容器、消息用户或通讯组列表。
针对实现者的说明
在 MAPI 调用 OpenEntry 方法之前,它会确定 lpEntryID 参数中的条目标识符属于你,而不是属于其他提供程序。 MAPI 通过将条目标识符中的 MAPIUID 结构与启动时通过调用 IMAPISupport::SetProviderUID 方法注册的 MAPIUID 进行匹配来执行此操作。
除非 ulFlags 参数中设置了 MAPI_MODIFY 或 MAPI_BEST_ACCESS 标志,否则以只读模式打开对象。 如果不允许修改所请求的对象,则根本不打开对象并返回MAPI_E_NO_ACCESS。
如果 MAPI 为 lpEntryID 传递 NULL,请在容器层次结构中打开根容器。
要求打开的对象可能是从另一个提供程序复制的对象。 在这种情况下,它将支持 PR_TEMPLATEID (PidTagTemplateid) 属性。 如果对象确实支持此属性,请调用 IMAPISupport::OpenTemplateID 方法以绑定到外部提供程序中此条目的代码,在 lpTemplateID 参数中传递PR_TEMPLATEID,在 ulTemplateFlags 参数中传递 0。 IMAPISupport::OpenTemplateID 在调用外部提供程序的 IABLogon::OpenTemplateID 方法时将此信息传递给外部提供程序。 如果 IMAPISupport::OpenTemplateID 引发错误,通常是因为外部提供程序不可用或未包含在配置文件中,请尝试通过将未绑定条目视为只读来继续。 有关打开外部通讯簿条目的详细信息,请参阅 充当主机通讯簿提供程序。