次の方法で共有


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 で返される値で指定) を現在位置オフセットに追加することで、ストリーム内の現在位置を更新する必要があります。

現在の位置を更新できるその他のメソッドは、 ReadBeginReadBeginWriteSeekおよび SetCurrentPosition です

このインターフェイスは、Windows Media Format 11 SDK 再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで使用できます。

  • Windows XP Service Pack 2 (SP2) 以降。
  • Windows XP Media Center Edition 2005 KB900325 (Windows XP Media Center Edition 2005) とKB925766 (2006 年 10 月 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
ヘッダー mfobjects.h (Mfidl.h を含む)
Library Mfuuid.lib

こちらもご覧ください

IMFByteStream