Condividi tramite


Metodo IMFByteStream::Write (mfobjects.h)

Scrive dati nel flusso.

Sintassi

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

Parametri

[in] pb

Puntatore a un buffer contenente i dati da scrivere.

[in] cb

Dimensione del buffer in byte.

[out] pcbWritten

Riceve il numero di byte scritti.

Valore restituito

Se questo metodo ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .

Commenti

Questo metodo scrive il contenuto del buffer pb nel flusso, a partire dalla posizione corrente del flusso. Il numero di byte scritti viene restituito nel parametro pcbWritten .

Questo metodo è asincrono. Si blocca fino al completamento dell'operazione di scrittura.

Note sull'implementazione:Questo metodo deve aggiornare la posizione corrente nel flusso aggiungendo il numero di byte scritti nel flusso, specificato dal valore restituito nel pcbWritten, all'offset di posizione corrente.

Altri metodi che possono aggiornare la posizione corrente sono Read, BeginRead, BeginWrite, Seek e SetCurrentPosition.

Questa interfaccia è disponibile nelle piattaforme seguenti se vengono installati i componenti ridistribuibili di Windows Media Format 11 SDK:

  • Windows XP con Service Pack 2 (SP2) e versioni successive.
  • Windows XP Media Center Edition 2005 con KB900325 (Windows XP Media Center Edition 2005) e KB925766 (aggiornamento cumulativo di ottobre 2006 per Windows XP Media Center Edition) installato.

Esempio

Nell'esempio seguente vengono scritti dati da un buffer multimediale in un flusso di byte. Per altre informazioni sui buffer multimediali, vedere Buffer multimediali.

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

Il modello di funzione seguente scrive una variabile tipizzata in un flusso di byte.

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

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione mfobjects.h (include Mfidl.h)
Libreria Mfuuid.lib

Vedi anche

IMFByteStream