Поделиться через


Поиск дочернего фрагмента

В следующем примере функция mmioDescend используется для поиска блока "FMT" в блоке "RIFF" предыдущего примера.

// Find the format chunk (form type "FMT"); it should be 
// a subchunk of the "RIFF" parent chunk. 
mmckinfoSubchunk.ckid = mmioFOURCC('f', 'm', 't', ' '); 
if (mmioDescend(hmmio, &mmckinfoSubchunk, &mmckinfoParent, 
    MMIO_FINDCHUNK)) 
    // Error, cannot find the "FMT" chunk. 
else 
    // "FMT" chunk found. 

Чтобы найти вложенный фрагмент (т. е. любой фрагмент, отличный от "RIFF" или "LIST"), определите его родительский блок в параметре lpckParent функции mmioDescend .

Если родительский фрагмент не указан, текущая позиция файла должна находиться в начале блока перед вызовом функции mmioDescend . Если указать родительский блок, текущая позиция файла может находиться в любом месте этого блока.

Если поиск подпанка завершается сбоем, текущая позиция файла не определена. Вы можете использовать функцию mmioSeek и элемент dwDataOffset структуры MMCKINFO , описывающей родительский блок, чтобы вернуться к началу родительского блока, как показано в следующем примере:

mmioSeek(hmmio, mmckinfoParent.dwDataOffset + 4, SEEK_SET); 

Так как dwDataOffset задает смещение до начала части данных блока, необходимо искать 4 байта после dwDataOffset , чтобы задать позицию файла после типа формы.