IMAPISupport::IStorageFromStream

适用于:Outlook 2013 | Outlook 2016

实现存储对象以访问流。

HRESULT IStorageFromStream(
  LPUNKNOWN lpUnkIn,
  LPCIID lpInterface,
  ULONG ulFlags,
  LPSTORAGE FAR * lppStorageOut
);

参数

lpUnkIn

[in]指向流对象的指针。

lpInterface

[in]指向接口标识符的指针 (IID) ,表示用于访问 lpUnkIn 指向的流的接口。 以下任何值都有效:IID_IStream、IID_ILockBytes或 null,指示应使用 IStream 接口访问流。

ulFlags

[in]一个标志的位掩码,用于控制相对于流对象创建存储对象的方式。 默认情况下,使用只读访问权限创建存储,并且流从存储中的零位置开始。 可以设置以下标志:

STGSTRM_CREATE

应为流对象创建新的存储对象。

STGSTRM_CURRENT

存储对象应从流的当前位置开始。

STGSTRM_MODIFY

调用方应对返回的存储对象具有读/写权限。

STGSTRM_RESET

存储对象应从位置零开始。

lppStorageOut

[out]指向存储对象的指针的指针。

返回值

S_OK

已成功创建存储对象。

备注

为所有服务提供商支持对象实现 IMAPISupport::IStorageFromStream 方法。 服务提供商调用 IStorageFromStream 来创建用于打开特定属性的存储对象。 具有自己的 IStorage 接口实现的服务提供商不需要调用 IStorageFromStream

IStorageFromStream 创建的存储对象调用流的 IUnknown::AddRef 方法,以增加其引用计数,然后在释放存储时递减计数。

给调用方的说明

调用其中一个对象的 IMAPIProp::OpenProperty 方法以使用 IStorage 接口打开属性时,请执行以下任务:

  1. 打开具有属性的读/写权限的流对象。

  2. 在内部将属性流标记为存储对象。

  3. 调用 IStorageFromStream 以生成存储对象。

  4. 返回指向此存储对象的指针。

如果实现使用存储对象的其他接口,请创建一个包装存储对象的 对象,并实现更高级别 的 IUnknown::QueryInterface 方法。

如果属性是使用 IStorage 创建的,则不允许使用 IStream 接口打开该属性。 相反,如果属性是使用 IStream 创建的,则不允许使用 IStorage 接口打开该属性。

除了一个例外,可以使用 IStreamDocfile 接口将存储对象从一个容器流式传输到另一个容器,但必须在 OpenProperty 方法的 lpInterface 参数中传递IID_IStreamDocfile接口标识符。

另请参阅

IMAPIProp::OpenProperty

IMAPISupport : IUnknown