Partager via


Méthode IMFByteStream ::Write (mfobjects.h)

Écrit des données dans le flux.

Syntaxe

HRESULT Write(
  [in]  const BYTE *pb,
  [in]  ULONG      cb,
  [out] ULONG      *pcbWritten
);

Paramètres

[in] pb

Pointeur vers une mémoire tampon qui contient les données à écrire.

[in] cb

Taille, en octets, de la mémoire tampon.

[out] pcbWritten

Reçoit le nombre d’octets écrits.

Valeur retournée

Si cette méthode réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Remarques

Cette méthode écrit le contenu de la mémoire tampon pb dans le flux, en commençant à la position actuelle du flux. Le nombre d’octets qui ont été écrits est retourné dans le paramètre pcbWritten .

Cette méthode est synchrone. Il se bloque jusqu’à ce que l’opération d’écriture se termine.

Notes d’implémentation :Cette méthode doit mettre à jour la position actuelle dans le flux en ajoutant le nombre d’octets qui ont été écrits dans le flux, qui est spécifié par la valeur retournée dans le pcbWritten, au décalage de position actuelle.

Les autres méthodes qui peuvent mettre à jour la position actuelle sont Read, BeginRead, BeginWrite, Seek et SetCurrentPosition.

Cette interface est disponible sur les plateformes suivantes si les composants redistribuables du SDK Windows Media Format 11 sont installés :

  • Windows XP avec Service Pack 2 (SP2) et versions ultérieures.
  • Windows XP Media Center Edition 2005 avec KB900325 (Windows XP Media Center Edition 2005) et KB925766 (correctif cumulatif d’octobre 2006 pour Windows XP Édition Media Center) installés.

Exemples

L’exemple suivant écrit des données d’une mémoire tampon multimédia dans un flux d’octets. Pour plus d’informations sur les mémoires tampons multimédias, consultez Mémoires tampons multimédias.

//-------------------------------------------------------------------
// WriteBufferToByteStream
//
// Writes data from a media buffer to a byte stream.
//-------------------------------------------------------------------

HRESULT WriteBufferToByteStream(
    IMFByteStream *pStream,   // Pointer to the byte stream.
    IMFMediaBuffer *pBuffer,  // Pointer to the media buffer.
    DWORD *pcbWritten         // Receives the number of bytes written.
    )
{
    HRESULT hr = S_OK;
    DWORD cbData = 0;
    DWORD cbWritten = 0;
    BYTE *pMem = NULL;

    hr = pBuffer->Lock(&pMem, NULL, &cbData);

    if (SUCCEEDED(hr))
    {
        hr = pStream->Write(pMem, cbData, &cbWritten);
    }

    if (SUCCEEDED(hr))
    {
        if (pcbWritten)
        {
            *pcbWritten = cbWritten;
        }
    }

    if (pMem)
    {
        pBuffer->Unlock();
    }
    return hr;
}

Le modèle de fonction suivant écrit une variable typée dans un flux d’octets.

template <class T>
HRESULT WriteToStream(
    IMFByteStream *pStream, // Pointer to the byte stream.
    const T* p,             // Data to write to the stream.
    ULONG cb = sizeof(T)    // Size of the data in bytes.
)
{
    ULONG cbWritten = 0;
    HRESULT hr = S_OK;

    hr = pStream->Write((const BYTE*)p, cb, &cbWritten);
    if (SUCCEEDED(hr) && (cbWritten != cb))
    {
        hr = E_FAIL;
    }
    return hr;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau | applications UWP]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête mfobjects.h (inclure Mfidl.h)
Bibliothèque Mfuuid.lib

Voir aussi

IMFByteStream