Acessando um buffer de E/S de arquivo
[O recurso associado a esta página, E/S de Arquivo Multimídia, é um recurso herdado. Ele foi substituído pelo Leitor de Origem. O Leitor de Origem foi otimizado para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o Leitor de Origem em vez de E/S de Arquivo Multimídia, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
O exemplo a seguir acessa um buffer de E/S diretamente para ler dados de um arquivo de áudio de forma de onda.
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);
Quando você terminar de acessar um buffer de E/S de arquivo, chame a função mmioSetInfo , passando um endereço da estrutura MMIOINFO preenchida pela função mmioGetInfo . Se você escreveu no buffer, defina o sinalizador MMIO_DIRTY no membro dwFlags da estrutura MMIOINFO antes de chamar mmioSetInfo. Caso contrário, o buffer não será liberado para o disco.