Функция 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 или более поздняя) |