Freigeben über


IMFByteStream::Write-Methode (mfobjects.h)

Schreibt Daten in den Stream.

Syntax

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

Parameter

[in] pb

Zeiger auf einen Puffer, der die zu schreibenden Daten enthält.

[in] cb

Größe des Puffers in Byte.

[out] pcbWritten

Empfängt die Anzahl der geschriebenen Bytes.

Rückgabewert

Wenn diese Methode erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein Fehlercode HRESULT zurückgegeben.

Hinweise

Diese Methode schreibt den Inhalt des pb-Puffers in den Stream, beginnend bei der aktuellen Streamposition. Die Anzahl der geschriebenen Bytes wird im pcbWritten-Parameter zurückgegeben.

Diese Methode ist synchron. Es wird blockiert, bis der Schreibvorgang abgeschlossen ist.

Implementierungshinweise:Diese Methode sollte die aktuelle Position im Stream aktualisieren, indem die Anzahl der Bytes, die in den Stream geschrieben wurden, die durch den im pcbWritten zurückgegebenen Wert angegeben wird, dem aktuellen Positionsoffset hinzugefügt wird.

Andere Methoden, die die aktuelle Position aktualisieren können, sind Read, BeginRead, BeginWrite, Seek und SetCurrentPosition.

Diese Schnittstelle ist auf den folgenden Plattformen verfügbar, wenn die verteilbaren Windows Media Format 11 SDK-Komponenten installiert sind:

  • Windows XP mit Service Pack 2 (SP2) und höher.
  • Windows XP Media Center Edition 2005 mit KB900325 (Windows XP Media Center Edition 2005) und KB925766 (Updaterollup für Windows XP Media Center Edition) vom Oktober 2006) installiert.

Beispiele

Im folgenden Beispiel werden Daten aus einem Medienpuffer in einen Bytedatenstrom geschrieben. Weitere Informationen zu Medienpuffern finden Sie unter Medienpuffer.

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

Die folgende Funktionsvorlage schreibt eine typisierte Variable in einen Bytestream.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile mfobjects.h (include Mfidl.h)
Bibliothek Mfuuid.lib

Weitere Informationen

IMFByteStream