Поделиться через


Метод IMFByteStream::Write (mfobjects.h)

Записывает данные в поток.

Синтаксис

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

Параметры

[in] pb

Указатель на буфер, содержащий данные для записи.

[in] cb

Размер буфера в байтах.

[out] pcbWritten

Получает число записанных байтов.

Возвращаемое значение

Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

Этот метод записывает содержимое буфера PB в поток, начиная с текущей позиции потока. Число записанных байтов возвращается в параметре pcbWritten .

Этот метод является синхронным. Он блокируется до завершения операции записи.

Примечания о реализации:Этот метод должен обновить текущую позицию в потоке, добавив число байтов, записанных в поток, которое задается значением, возвращенным в pcbWritten, к смещению текущей позиции.

Другие методы, которые могут обновить текущую позицию: Read, BeginRead, BeginWrite, Seek и SetCurrentPosition.

Этот интерфейс доступен на следующих платформах, если установлены распространяемые компоненты пакета SDK для Windows Media Format 11:

  • Windows XP с пакетом обновления 2 (SP2) и более поздних версий.
  • Windows XP Media Center Edition 2005 с установленным KB900325 (Windows XP Media Center Edition 2005) и KB925766 (накопительный пакет обновления за октябрь 2006 г. для Windows XP Media Center Edition).

Примеры

В следующем примере данные из буфера мультимедиа записываются в поток байтов. Дополнительные сведения о буферах мультимедиа см. в разделе Буферы мультимедиа.

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

Следующий шаблон функции записывает типизированные переменные в поток байтов.

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

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header mfobjects.h (включая Mfidl.h)
Библиотека Mfuuid.lib

См. также раздел

IMFByteStream