Функция mciSendString
Как передать устройству управляющую строку?
Очень просто - для этого можно воспользоваться функцией mciSendString . Прототип функции mciSendString находится в файле mmsystem.h:
Функция mciSendString
DWORD mciSendString( LPCSTR lpstrCommand, // управляющая строка LPSTR lpstrReturnString, // буфер для результата UINT wReturnLength, // размер буфера HANDLE hCallback) // идентификатор окна извещения
Параметры функции:
lpstrCommand
Дальний указатель на текстовую управляющую строку
lpstrReturnString
Указатель на буфер, в который будет записан результат выполнения команды (в текстовом виде). Этот параметр можно указать как NULL, если приложение не интересуется результатом выполнения команды
wReturnLength
Размер буфера для записи результата выполнения команды
hCallback
Идентификатор окна, которое получит извещение (сообщение MM_MCINOTIFY) после того как устройство завершит операцию. Этот параметр можно указать как NULL, если извещение не используется
Возвращаемое значение:
Нуль при успешном завершении или код ошибки (в младшем слове возвращаемого значения):
MCIERR_BAD_CONSTANT
Указана константа, неправильная для данной команды
MCIERR_BAD_INTEGER
Указано значение, неправильное для данной команды
MCIERR_DUPLICATE_FLAGS
Двойное определение параметра или значения
MCIERR_MISSING_COMMAND_STRING
Не указана управляющая строка
MCIERR_MISSING_DEVICE_NAME
Не указано имя устройства, драйвера, файла или алиас
MCIERR_MISSING_STRING_ARGUMENT
Не указан обязательный параметр команды
MCIERR_NEW_REQUIRED_ALIAS
При использовании параметра new следует указать алиас
MCIERR_NO_CLOSING_QUOTE
В команде отсутствуют закрывающие двойные кавычки
MCIERR_NOTIFY_ON_AUTO_OPEN
Для устройств, открываемых автоматически, нельзя указывать флаг notify (флаг notify указывает на необходимость генерации извещающего сообщения при завершении выполнения операции, мы расскажем об этом флаге позже)
MCIERR_PARAM_OVERFLOW
Строка параметров не помещается в буфер. Необходимо увеличить размер буфера
MCIERR_PARSER_INTERNAL
Ошибка в драйвере устройства. Следует заменить драйвер на новый, более поздней версии
MCIERR_UNRECOGNIZED_KEYWORD
Драйвер не распознал параметр управляющей строки
Например, для проигрывания wav-файла вы можете использовать следующую последовательность вызовов функции mciSendString :
mciSendString( (LPSTR)"open ding.wav type waveaudio alias snd wait", (LPSTR)szBuf, 256, NULL); mciSendString((LPSTR)"play snd wait", (LPSTR)szBuf, 256, NULL); mciSendString((LPSTR)"close snd", (LPSTR)szBuf, 256, NULL);
Для преобразования кода ошибки, полученного от функции mciSendString, в текстовую строку, можно воспользоваться функцией mciGetErrorString , которой необходимо передать двойное слово кода ошибки.
Функция mciGetErrorString
UINT mciGetErrorString( DWORD dwError, // код ошибки LPSTR lpstrBuffer, // буфер для записи текстовой строки UINT wLength); // размер буфера
Параметры функции:
dwError
Код ошибки, полученный от функции mciSendString или mciSendCommand (функция mciSendCommand предназначена для передачи управляющих сообщений, она будет рассмотрена позже)
lpstrBuffer
Буфер, в который будет записано текстовое описание ошибки
wLength
Размер буфера в байтах
Возвращаемое значение:
TRUE при успешном завершении или FALSE, если переданному коду ошибки не соответствует ни одно текстовое описание