IMFByteStream::Metode tulis (mfobjects.h)

Menulis data ke aliran.

Sintaks

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

Parameter

[in] pb

Penunjuk ke buffer yang berisi data yang akan ditulis.

[in] cb

Ukuran buffer dalam byte.

[out] pcbWritten

Menerima jumlah byte yang ditulis.

Mengembalikan nilai

Jika metode ini berhasil, metode akan mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan.

Keterangan

Metode ini menulis konten buffer pb ke aliran, dimulai pada posisi aliran saat ini. Jumlah byte yang ditulis dikembalikan dalam parameter pcbWritten .

Metode ini sinkron. Ini memblokir sampai operasi tulis selesai.

Catatan implementasi:Metode ini harus memperbarui posisi saat ini dalam aliran dengan menambahkan jumlah byte yang ditulis ke aliran, yang ditentukan oleh nilai yang dikembalikan dalam pcbWritten, ke offset posisi saat ini.

Metode lain yang dapat memperbarui posisi saat ini adalah Read, BeginRead, BeginWrite, Seek, dan SetCurrentPosition.

Antarmuka ini tersedia pada platform berikut jika komponen yang dapat didistribusikan ulang Windows Media Format 11 SDK diinstal:

  • Windows XP dengan Paket Layanan 2 (SP2) dan yang lebih baru.
  • Windows XP Media Center Edition 2005 dengan KB900325 (Windows XP Media Center Edition 2005) dan KB925766 (Rollup Pembaruan Oktober 2006 untuk Windows XP Media Center Edition) terinstal.

Contoh

Contoh berikut menulis data dari buffer media ke aliran byte. Untuk informasi selengkapnya tentang buffer media, lihat Buffer Media.

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

Templat fungsi berikut menulis variabel yang ditik ke aliran 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;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2008 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header mfobjects.h (termasuk Mfidl.h)
Pustaka Mfuuid.lib

Lihat juga

IMFByteStream