IAddrBook::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 将返回对象的标准接口。 对于消息传递用户,标准接口为 IMailUser :IMAPIProp。 对于通讯组列表,它是 IDistList :IMAPIContainer ,对于容器,它是 IABContainer :IMAPIContainer。 调用方可以将 lpInterface 设置为适当的标准接口或继承层次结构中的接口。
ulFlags
[in]控制条目的打开方式的标志的位掩码。 可以设置以下标志。
MAPI_BEST_ACCESS
请求使用允许的最大网络和客户端权限打开条目。 例如,如果客户端具有读/写权限,通讯簿提供程序应尝试使用读/写权限打开条目。 客户端可以通过调用打开条目的 IMAPIProp::GetProps 方法并检索 PR_ACCESS_LEVEL (PidTagAccessLevel) 属性来检索授予的访问级别。
MAPI_CACHE_ONLY
打开通讯簿条目,并仅从缓存访问它。 例如,可以使用此标志允许客户端应用程序在缓存交换模式下打开全局地址列表 (GAL) ,并从缓存访问该通讯簿中的条目,而无需在客户端和服务器之间创建流量。 仅 Exchange 通讯簿提供程序支持此标志。
MAPI_DEFERRED_ERRORS
允许调用成功(可能在条目完全打开且可用之前),这意味着以后对条目的调用可能会返回错误。
MAPI_GAL_ONLY
仅使用 GAL 来执行名称解析。 仅 Exchange 通讯簿提供程序支持此标志。
注意
ulFlags MAPI_GAL_ONLY可能未在当前具有的可下载头文件中定义,在这种情况下,可以使用以下值将其添加到代码中:#define MAPI_GAL_ONLY (0x00000080)
MAPI_MODIFY
请求使用读/写权限打开条目。 由于默认情况下以只读访问权限打开条目,因此无论是否设置了MAPI_MODIFY,客户端都不应假定已授予读/写权限。
MAPI_NO_CACHE
不要使用脱机通讯簿来执行名称解析。 仅 Exchange 通讯簿提供程序支持此标志。
lpulObjType
[out]指向打开的条目类型的指针。
lppUnk
[out]指向打开的条目的指针的指针。
返回值
S_OK
条目已成功打开。
MAPI_E_NO_ACCESS
尝试打开用户权限不足的条目。
MAPI_E_NOT_FOUND
lpEntryID 表示的条目不存在。
MAPI_E_UNKNOWN_ENTRYID
无法识别 lpEntryID 中指定的条目标识符。 如果未打开负责相应条目的通讯簿提供程序,则通常返回此值。
备注
客户端和服务提供商调用 IAddrBook::OpenEntry 方法以打开通讯簿条目。 MAPI 根据 lpEntryID 参数中传递的条目标识符中包含的 MAPIUID 结构,将调用转发到相应的通讯簿提供程序。 除非设置了 ulFlags 参数中的 MAPI_MODIFY 或 MAPI_BEST_ACCESS 标志,否则通讯簿提供程序将条目打开为只读。 但是,这些标志是建议。 如果通讯簿提供程序不允许修改所请求的条目,则会返回MAPI_E_NO_ACCESS。
lpInterface 参数指示应使用哪个接口来访问打开的条目。 在 lpInterface 中传递 NULL 表示应使用该类型的条目的标准 MAPI 接口。 由于通讯簿提供程序可能返回的接口可能与 lpInterface 参数建议的接口不同,因此调用方应检查 lpulObjType 参数中返回的值,以确定返回的对象类型是否为预期类型。 如果对象类型不是预期的类型,则调用方可以将 lppUnk 参数强制转换为更合适的类型。