Share via


Fonction SHCreateMemStream (shlwapi.h)

Crée un flux de mémoire à l’aide d’un processus similaire à CreateStreamOnHGlobal.

Syntaxe

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

Paramètres

[in, optional] pInit

Type : const BYTE*

Pointeur vers une mémoire tampon de taille cbInit. Le contenu de cette mémoire tampon est utilisé pour définir le contenu initial du flux de mémoire. Si ce paramètre a la valeur NULL, le flux de mémoire retourné n’a pas de contenu initial.

[in] cbInit

Type : UINT

Nombre d’octets dans la mémoire tampon pointée vers pInit. Si pInit a la valeur NULL, cbInit doit être égal à zéro.

Valeur retournée

Type : IStream*

En cas de réussite, retourne un pointeur vers le flux de mémoire créé. Retourne la valeur NULL si l’objet stream n’a pas pu être alloué.

Remarques

Avant Windows Vista, cette fonction n’était pas incluse dans le fichier public Shlwapi.h et n’était pas exportée par nom à partir de Shlwapi.dll. Pour l’utiliser sur des systèmes antérieurs, vous devez l’appeler directement à partir du fichier Shlwapi.dll en tant que ordinal 12.

Cette fonction crée un flux de mémoire. Il s’agit d’une implémentation de l’interface IStream qui stocke son contenu en mémoire. SHCreateMemStream diffère de CreateStreamOnHGlobal de la manière suivante.

  • Sécurité des threads. Le flux créé par SHCreateMemStream est thread-safe à partir de Windows 8. Sur les systèmes antérieurs, le flux n’est pas thread-safe. Le flux créé par CreateStreamOnHGlobal est thread-safe.
  • Contenu initial. SHCreateMemStream accepte le contenu initial sous la forme d’une mémoire tampon. CreateStreamOnHGlobal accepte le contenu initial sous la forme d’un HGLOBAL.
  • Accès au contenu. SHCreateMemStream n’autorise pas l’accès direct au contenu du flux. CreateStreamOnHGlobal autorise l’accès via GetHGlobalFromStream.
  • Informations sur l’échec. Si SHCreateMemStream retourne NULL, il n’a pas pu allouer la mémoire nécessaire. Les appelants doivent supposer que la cause est E_OUTOFMEMORY.
  • Prise en charge d’IStream::Clone. Avant Windows 8, le flux créé par SHCreateMemStream ne prend pas en charge IStream::Clone. Le flux créé par CreateStreamOnHGlobal le fait. À partir de Windows 8, le flux créé par SHCreateMemStream prend en charge IStream::Clone.
  • Le flux retourné par SHCreateMemStream retourne S_FALSE à partir de IStream::Read si vous tentez de lire au-delà de la fin de la mémoire tampon. Le flux retourné par CreateStreamOnHGlobal retourne S_OK et définit *pcbRead sur 0 si vous tentez de lire au-delà de la fin de la mémoire tampon.

Configuration requise

   
Client minimal pris en charge Windows 2000 Professionnel, Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server, Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête shlwapi.h
Bibliothèque Shlwapi.lib
DLL Shlwapi.dll (version 5.0 ou ultérieure)