Поделиться через


Функция 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 , возвращает S_FALSE из IStream::Read , если вы пытаетесь выполнить чтение после конца буфера. Поток, возвращаемый методом CreateStreamOnHGlobal , возвращает S_OK и присваивает параметру *pcbRead значение 0 при попытке чтения после конца буфера.

Требования

   
Минимальная версия клиента Windows 2000 Professional, Windows XP [только классические приложения]
Минимальная версия сервера Windows 2000 Server, Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header shlwapi.h
Библиотека Shlwapi.lib
DLL Shlwapi.dll (версия 5.0 или более поздняя)