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 或更高版本) |