サブチャンクの検索

次の例では、 Mmiodescend 関数を使用して、前の例の "RIFF" チャンクの "FMT" チャンクを検索します。

// 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" チャンク以外のチャンク) を検索するには、 Mmiodescend関数のパラメーターでその親チャンクを識別します。

親チャンクを指定しない場合、 Mmiodescend 関数を呼び出す前に、現在のファイルの位置をチャンクの先頭に配置する必要があります。 親チャンクを指定する場合、現在のファイルの位置をそのチャンク内の任意の場所にすることができます。

サブチャンクの検索に失敗した場合、現在のファイルの位置は未定義になります。 次の例のように、 Mmioseek関数と、親チャンクを記述する MMCKINFO構造体の dwDataOffset メンバーを使用して、親チャンクの先頭までシークすることができます。

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

DwDataOffset はチャンクのデータ部分の先頭へのオフセットを指定するため、フォーム型の後にファイルの位置を設定するには、4バイトを超える dwDataOffset をシークする必要があります。