ファイル I/O バッファーへのアクセス
[このページに関連付けられている機能である マルチメディア ファイル I/O は、従来の機能です。 ソース リーダーに置き換わりました。 ソース リーダーは、Windows 10とWindows 11用に最適化されています。 可能な場合は、新しいコードでマルチメディア ファイル I/O ではなくソース リーダーを使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
次の例では、I/O バッファーに直接アクセスして、波形オーディオ ファイルからデータを読み取ります。
HMMIO hmmio;
MMIOINFO mmioinfo;
DWORD dwDataSize;
DWORD dwCount;
HPSTR hptr;
// Get information about the file I/O buffer.
if (mmioGetInfo(hmmio, &mmioinfo, 0))
{
Error("Failed to get I/O buffer info.");
.
.
.
mmioClose(hmmio, 0);
return;
}
// Read the entire file by directly reading the file I/O buffer.
// When the end of the I/O buffer is reached, advance the buffer.
for (dwCount = dwDataSize, hptr = lpData; dwCount 0; dwCount--)
{
// Check to see if the I/O buffer must be advanced.
if (mmioinfo.pchNext == mmioinfo.pchEndRead)
{
if(mmioAdvance(hmmio, &mmioinfo, MMIO_READ))
{
Error("Failed to advance buffer.");
.
.
.
mmioClose(hmmio, 0);
return;
}
}
// Get a character from the buffer.
*hptr++ = *mmioinfo.pchNext++;
}
// End direct buffer access and close the file.
mmioSetInfo(hmmio, &mmioinfo, 0);
mmioClose(hmmio, 0);
ファイル I/O バッファーへのアクセスが完了したら、mmioSetInfo 関数を呼び出し、mmioGetInfo 関数によって入力された MMIOINFO 構造体のアドレスを渡します。 バッファーに書き込んだ場合は、mmioSetInfo を呼び出す前に、MMIOINFO 構造体の dwFlags メンバーに MMIO_DIRTY フラグを設定します。 それ以外の場合、バッファーはディスクにフラッシュされません。