Método IMFByteStream::Write (mfobjects.h)
Grava dados no fluxo.
Sintaxe
HRESULT Write(
[in] const BYTE *pb,
[in] ULONG cb,
[out] ULONG *pcbWritten
);
Parâmetros
[in] pb
Ponteiro para um buffer que contém os dados a serem gravados.
[in] cb
O tamanho do buffer em bytes.
[out] pcbWritten
Recebe o número de bytes gravados.
Retornar valor
Se o método for bem-sucedido, ele retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.
Comentários
Esse método grava o conteúdo do buffer pb no fluxo, começando na posição atual do fluxo. O número de bytes que foram gravados é retornado no parâmetro pcbWritten .
Esse método é síncrono. Ele é bloqueado até que a operação de gravação seja concluída.
Notas de implementação:Esse método deve atualizar a posição atual no fluxo adicionando o número de bytes que foram gravados no fluxo, que é especificado pelo valor retornado no pcbWritten, ao deslocamento de posição atual.
Outros métodos que podem atualizar a posição atual são Read, BeginRead, BeginWrite, Seek e SetCurrentPosition.
Essa interface estará disponível nas seguintes plataformas se os componentes redistribuíveis do SDK do Windows Media Format 11 estiverem instalados:
- Windows XP com Service Pack 2 (SP2) e posterior.
- Windows XP Media Center Edition 2005 com KB900325 (Windows XP Media Center Edition 2005) e KB925766 (pacote cumulativo de atualizações de outubro de 2006 para Windows XP Media Center Edition) instalados.
Exemplos
O exemplo a seguir grava dados de um buffer de mídia em um fluxo de bytes. Para obter mais informações sobre buffers de mídia, consulte Buffers de mídia.
//-------------------------------------------------------------------
// 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;
}
O modelo de função a seguir grava uma variável tipada em um fluxo de bytes.
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;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | mfobjects.h (include Mfidl.h) |
Biblioteca | Mfuuid.lib |