почему MCI_OPEN завершается с ошибкой и возвращает недопустимый идентификатор устройства?
-
18-09-2019 - |
Вопрос
dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE
, (DWORD_PTR)(LPVOID) &mciOpenParms);
сообщение об ошибке: "Имя устройства уже используется этим приложением в качестве псевдонима.Используйте уникальный псевдоним".
Почему он выдает ошибку?
Решение 2
Это может произойти при попытке повторно открыть уже открытое устройство mci.
Если флаг MCI_OPEN_SHAREABLE не указан при первоначальном открытии устройства или файла, все последующие команды MCI_OPEN для устройства или файла завершатся ошибкой.
Другие советы
Хотя технически этот ответ был правильным, он мне не очень помог.
"Если флаг MCI_OPEN_SHAREABLE не указан при первоначальном открытии устройства или файла, все последующие команды MCI_OPEN для устройства или файла завершатся ошибкой".
Я обнаружил, что мне нужно сделать MCI_CLOSE перед любым MCI_OPEN , вот так:
MciClose(void)
{
int Result;
MCI_GENERIC_PARMS mciGenericParams;
DWORD dwFlags;
mciGenericParams.dwCallback = (long)TestSoundForm->Handle;
dwFlags = MCI_NOTIFY | MCI_WAIT;
Result = mciSendCommand(MciDeviceID, MCI_CLOSE, dwFlags, (long)&mciGenericParams);
// MCIERR_INVALID_DEVICE_ID occurs if the device is already closed.
if(Result == 0 || Result == MCIERR_INVALID_DEVICE_ID)return;
else MciError(Result, "MCI_CLOSE Error"); // display the error
}
Кроме того, вот очень хорошая статья о программировании этих аудиоустройств.
http://www.c-sharpcorner.com/uploadfile/GemingLeader/creating-a-sound-recorder-in-c-and-C-Sharp/