Compartir a través de


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

Escribe datos en la secuencia.

Sintaxis

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

Parámetros

[in] pb

Puntero a un búfer que contiene los datos que se van a escribir.

[in] cb

Tamaño del búfer en bytes.

[out] pcbWritten

Recibe el número de bytes que se escriben.

Valor devuelto

Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.

Comentarios

Este método escribe el contenido del búfer pb en la secuencia, comenzando en la posición actual de la secuencia. El número de bytes escritos se devuelve en el parámetro pcbWritten .

Este método es sincrónico. Se bloquea hasta que se completa la operación de escritura.

Notas de implementación:Este método debe actualizar la posición actual en la secuencia agregando el número de bytes escritos en la secuencia, especificado por el valor devuelto en pcbWritten, al desplazamiento de posición actual.

Otros métodos que pueden actualizar la posición actual son Read, BeginRead, BeginWrite, Seek y SetCurrentPosition.

Esta interfaz está disponible en las siguientes plataformas si se instalan los componentes redistribuibles del SDK de Windows Media Format 11:

  • Windows XP con Service Pack 2 (SP2) y versiones posteriores.
  • Windows XP Media Center Edition 2005 con KB900325 (Windows XP Media Center Edition 2005) y KB925766 (paquete acumulativo de actualizaciones de octubre de 2006 para Windows XP Media Center Edition) instalado.

Ejemplos

En el ejemplo siguiente se escriben datos de un búfer multimedia en una secuencia de bytes. Para obtener más información sobre los búferes multimedia, consulte Búferes multimedia.

//-------------------------------------------------------------------
// 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;
}

La siguiente plantilla de función escribe una variable con tipo en una secuencia de bytes.

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;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado mfobjects.h (include Mfidl.h)
Library Mfuuid.lib

Consulte también

IMFByteStream