Мультимедиа для Windows

5b239685

Функция 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, если переданному коду ошибки не соответствует ни одно текстовое описание


Содержание раздела