Метод 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 |