Función mmioDescend (mmiscapi.h)

La función mmioDescend desciende en un fragmento de un archivo RIFF que se abrió mediante la función mmioOpen . También puede buscar un fragmento determinado.

Sintaxis

MMRESULT mmioDescend(
  HMMIO          hmmio,
  LPMMCKINFO     pmmcki,
  const MMCKINFO *pmmckiParent,
  UINT           fuDescend
);

Parámetros

hmmio

Identificador de archivo de un archivo RIFF abierto.

pmmcki

Puntero a un búfer que recibe una estructura MMCKINFO .

pmmckiParent

Puntero a una estructura MMCKINFO definida por la aplicación opcional que identifica el elemento primario del fragmento que se está buscando. Si este parámetro no es NULL, mmioDescend supone que la estructura MMCKINFO a la que hace referencia se llenó cuando se llamó a mmioDescend para descender al fragmento primario y mmioDescend busca un fragmento dentro del fragmento primario. Establezca este parámetro en NULL si no se especifica ningún fragmento primario.

fuDescend

Marcas de búsqueda. Si no se especifican marcas, mmioDescend desciende en el fragmento que comienza en la posición del archivo actual. Se definen los valores siguientes.

Valor Significado
MMIO_FINDCHUNK Busca un fragmento con el identificador de fragmento especificado.
MMIO_FINDLIST Busca un fragmento con el identificador de fragmento "LIST" y con el tipo de formulario especificado.
MMIO_FINDRIFF Busca un fragmento con el identificador de fragmento "RIFF" y con el tipo de formulario especificado.

Valor devuelto

Devuelve MMSYSERR_NOERROR si se ejecuta correctamente o si se produce un error. Entre los posibles valores de error se incluyen los siguientes.

Código devuelto Descripción
MMIOERR_CHUNKNOTFOUND
Se alcanzó el final del archivo (o el final del fragmento primario, si se indica) antes de que se encontrara el fragmento deseado.

Comentarios

Un fragmento "RIFF" consta de un identificador de fragmento de cuatro bytes (tipo FOURCC), seguido de un tamaño de fragmento de cuatro bytes (tipo DWORD), seguido de la parte de datos del fragmento, seguido de un byte de panel nulo si el tamaño de la parte de datos es impar. Si el identificador de fragmento es "RIFF" o "LIST", los cuatro primeros bytes de la parte de datos del fragmento son un tipo de formulario o tipo de lista (tipo FOURCC).

Si usa mmioDescend para buscar un fragmento, asegúrese de que la posición del archivo está al principio de un fragmento antes de llamar a la función. La búsqueda comienza en la posición del archivo actual y continúa hasta el final del archivo. Si se especifica un fragmento primario, la posición del archivo debe estar en algún lugar del fragmento primario antes de llamar a mmioDescend. En este caso, la búsqueda comienza en la posición del archivo actual y continúa hasta el final del fragmento primario.

Si mmioDescend no se realiza correctamente en la búsqueda de un fragmento, la posición del archivo actual no está definida. Si mmioDescend se realiza correctamente, se cambia la posición del archivo actual. Si el fragmento es un fragmento "RIFF" o "LIST", la nueva posición del archivo será justo después del tipo de formulario o tipo de lista (12 bytes desde el principio del fragmento). Para otros fragmentos, la nueva posición del archivo será el inicio de la parte de datos del fragmento (8 bytes desde el principio del fragmento).

La función mmioDescend rellena la estructura MMCKINFO a la que apunta el parámetro lpck con la siguiente información:

  • El miembro ckid es el fragmento. Si se especifica la marca MMIO_FINDCHUNK, MMIO_FINDRIFF o MMIO_FINDLIST para wFlags, la estructura MMCKINFO también se usa para pasar parámetros a mmioDescend. En este caso, el miembro ckid especifica el código de cuatro caracteres del identificador de fragmento, el tipo de formulario o el tipo de lista que se va a buscar.
  • El miembro cksize es el tamaño, en bytes, de la parte de datos del fragmento. El tamaño incluye el tipo de formulario o el tipo de lista (si existe), pero no incluye el encabezado de fragmento de 8 bytes o el byte del panel al final de los datos (si existe).
  • El miembro fccType es el tipo de formulario si ckid es "RIFF" o el tipo de lista si ckid es "LIST". De lo contrario, es NULL.
  • El miembro dwDataOffset es el desplazamiento del archivo del principio de la parte de datos del fragmento. Si el fragmento es un fragmento "RIFF" o un fragmento "LIST", este miembro es el desplazamiento del tipo de formulario o tipo de lista.
  • El miembro dwFlags contiene otra información sobre el fragmento. Actualmente, esta información no se usa y se establece en cero.

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado mmiscapi.h (incluye Mmiscapi.h, Windows.h)
Library Winmm.lib
Archivo DLL Winmm.dll