IMAPISupport::OpenEntry
适用于:Outlook 2013 | Outlook 2016
打开对象并返回接口指针以供进一步访问。
HRESULT OpenEntry(
ULONG cbEntryID,
LPENTRYID lpEntryID,
LPCIID lpInterface,
ULONG ulOpenFlags,
ULONG FAR * lpulObjType,
LPUNKNOWN FAR * lppUnk
);
参数
cbEntryID
[in] lpEntryID 参数指向的条目标识符中的字节计数。
lpEntryID
[in]指向要打开的 对象的条目标识符的指针。
lpInterface
[in]指向接口标识符的指针 (IID) ,表示用于访问对象的接口。 传递 NULL 会导致返回对象的标准接口。 例如,如果要打开的对象是消息,则标准接口为 IMessage;对于文件夹,它是 IMAPIFolder。 通讯簿对象的标准接口是通讯组列表的 IDistList 和消息用户的 IMailUser 。
ulOpenFlags
[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 参数中传递的条目标识符采用无法识别的格式。 如果包含对象的通讯簿提供程序未打开,则通常返回此值。
备注
为所有服务提供程序支持对象实现 IMAPISupport::OpenEntry 方法。 服务提供程序调用 IMAPISupport::OpenEntry 以检索指向可用于访问特定对象的接口的指针。
给调用方的说明
仅当不知道要打开的对象类型时,才调用 IMAPISupport::OpenEntry 。 如果知道正在打开文件夹或邮件,请改为调用 IMsgStore::OpenEntry 。 如果知道要打开通讯簿容器、消息用户或通讯组列表,请调用 IAddrBook::OpenEntry。 这些更具体的方法比 IMAPISupport::OpenEntry 更快。
IMAPISupport::OpenEntry 将所有对象打开为只读,除非你在 ulFlags 参数中设置了MAPI_MODIFY或MAPI_BEST_ACCESS标志并且你的权限已足够。 设置其中一个标志并不能保证特定类型的访问;授予的权限取决于访问级别、对象和拥有 对象的服务提供程序。 若要确定打开的对象的访问级别, 请检索其PR_ACCESS_LEVEL (PidTagAccessLevel) 属性。
检查 lpulObjType 参数中返回的值,以确定返回的对象类型是否是预期的。 如果对象类型符合预期,请将 lppUnk 参数中的指针强制转换为相应类型的指针。 例如,如果要打开文件夹,请将 lppUnk 强制转换为类型为 LPMAPIFOLDER 的指针。