![]() |
![]() |
The following example accesses an I/O buffer directly to read data from a waveform-audio file.
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);
When you finish accessing a file I/O buffer, call the mmioSetInfo function, passing an address of the MMIOINFO structure filled by the mmioGetInfo function. If you wrote to the buffer, set the MMIO_DIRTY flag in the dwFlags member of the MMIOINFO structure before calling mmioSetInfo. Otherwise, the buffer will not be flushed to disk.