Интерфейс управления устройствами MCI (Media Control Interface) - Обработка ошибок

ОГЛАВЛЕНИЕ

Обработка ошибок

Как уже было сказано, функции MCI возвращают код ошибки при неудачном их выполнении. И тутже возникает вопрос: "а куда, собственно, девать этот код?". Здесь нам на помощь приходит другая функция - mciGetErrorString(), которая по коду ошибки выводит ее текстовое описание. Вот как она выглядит:

BOOL mciGetErrorString(DWORD fdwError,
LPTSTR lpszErrorText,
UINT cchErrorText)

где:

  • fdwError - код ошибки, полученный от одной из функций
  • lpszErrorText - указатель на буфер, который будет хранить описание ошибки
  • cchErrorText - указывает размер lpszErrorText буфера в символах

Как и большинство функций, она тоже возвращает результат своей деятельности. Если она вернула TRUE, то можно расслабиться и посмотреть, что же натворила функция находящаяся перед ней. Иначе (FALSE) придется поднопрячь извилины, потому что наша функция не смогла определить причину возникновения ошибки.

Давайте рассмотрим конкретный пример, где все встанет на свои места.

#include "stdafx.h"
#include <mmsystem.h>

void main()
{
const int cchErrorText = 128;
char lpszErrorText[cchErrorText];
DWORD fdwError = mciSendString("play c:\\windows\\tada.wav wait", NULL, 0, NULL);
if (fdwError)
{
BOOL dummy = mciGetErrorString(fdwError, lpszErrorText, cchErrorText);
if (dummy)
printf("%s\n", lpszErrorText);
else
printf("напряги извилины :-)");
}
}

Я специально указал неверный путь до файла, чтобы сработала наша функция. Все очень просто...правда?

 Рассмотрим некоторые возможности функции mciSendString() в работе с устройствами. Для примера возьмем CD-ROM и опять вернемся к команде play. Как раньше я говорил, командную строку можно разделить на три под команды: сама команда, устройство, которое будем использовать и параметры. Т.к. мы используем команду play, то ей характерны, только для CD-ROM'а, два параметра: from position и to position. Под position подразумевается передаваемое значение, в данном случае, для нашего устройства, это будут минуты.секунды.

При помощи этих значений можно воспроизводить трек с любого временного интервала. Параметр from задает начало воспроизведения, а to, соответственно, его конец.

Итак, рассмотрим пример. Допустим трек будет проигрываться 7 минут 22 секунды, как увертюра "The Magic Flute" у Моцарта. А нам надо, что бы проигрывался его кусочек: скажем с 4 минут до 5 минут.

#include "stdafx.h"
#include <mmsystem.h>

void main()
{
char lpstrCommand[256];

// Задаем интервал времени
char lpszPlayFlags[] = "from 4 to 5";
// Компонуем командную строку, где cdaudio - идентификатор устройства
wsprintf(lpstrCommand, "play %s %s %s", "cdaudio", lpszPlayFlags, "wait");
// Без комментариев
mciSendString(lpstrCommand, NULL, 0, NULL);
}

Следует немного поэкспериментировать, чтобы понять "принцип работы" этих параметров.