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


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

[Функция, связанная с этой страницей, мультимедийный файл ввода-вывода, является устаревшей функцией. Он был заменен программой чтения источников . средство чтения источников оптимизировано для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код средства чтения источников вместо мультимедийных файлов ввода-выводапо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

В следующем примере используется функция 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, чтобы задать положение файла после типа формы.