shCreateMemStream 函数 (shlwapi.h)

使用与 CreateStreamOnHGlobal 类似的进程创建内存流。

语法

IStream * SHCreateMemStream(
  [in, optional] const BYTE *pInit,
  [in]           UINT       cbInit
);

参数

[in, optional] pInit

类型: const BYTE*

指向 cbInit 大小的缓冲区的指针。 此缓冲区的内容用于设置内存流的初始内容。 如果此参数为 NULL,则返回的内存流没有任何初始内容。

[in] cbInit

类型: UINT

pInit 指向的缓冲区中的字节数。 如果 pInit 设置为 NULL则 cbInit 必须为零。

返回值

类型: IStream*

成功后,返回指向创建的内存流的指针。 如果无法分配流对象,则返回 NULL

注解

在 Windows Vista 之前,此函数未包含在公共 Shlwapi.h 文件中,也没有从 Shlwapi.dll 按名称导出。 若要在早期系统上使用它,必须直接从 Shlwapi.dll 文件调用它,如序号 12。

此函数创建内存流。 这是 IStream 接口的实现,该接口将其内容存储在内存中。 SHCreateMemStream 在以下方面不同于 CreateStreamOnHGlobal

  • 线程安全。 SHCreateMemStream 创建的流在 Windows 8 中是线程安全的。 在早期系统上,流不是线程安全的。 CreateStreamOnHGlobal 创建的流是线程安全的。
  • 初始内容。 SHCreateMemStream 接受缓冲区形式的初始内容。 CreateStreamOnHGlobal 接受 HGLOBAL 形式的初始内容。
  • 对内容的访问权限。 SHCreateMemStream 不允许直接访问流内容。 CreateStreamOnHGlobal 允许通过 GetHGlobalFromStream 进行访问。
  • 失败信息。 如果 SHCreateMemStream 返回 NULL,则无法分配必要的内存。 调用方应假定原因E_OUTOFMEMORY。
  • 支持 IStream::Clone。 在 Windows 8 之前, SHCreateMemStream 创建的流不支持 IStream::Clone由 CreateStreamOnHGlobal 创建的流会这样做。 从 Windows 8 起, SHCreateMemStream 创建的流支持 IStream::Clone
  • 如果尝试读取超过缓冲区末尾, 则 SHCreateMemStream 返回的流将从 IStream::Read 返回S_FALSE。 如果尝试读取超过缓冲区末尾, 则 CreateStreamOnHGlobal 返回的流将返回S_OK并将 *S_OK设置为 0。

要求

   
最低受支持的客户端 Windows 2000 专业版、Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server、Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 shlwapi.h
Library Shlwapi.lib
DLL Shlwapi.dll (5.0 或更高版本)