почему MCI_OPEN дает сбой и возвращает неверный идентификатор устройства? - PullRequest
0 голосов
/ 04 февраля 2010
dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE
                         , (DWORD_PTR)(LPVOID) &mciOpenParms);

error -message: «Имя устройства уже используется в качестве псевдонима этим приложением. Используйте уникальный псевдоним»

Почему выдает ошибку?

Ответы [ 2 ]

1 голос
/ 30 октября 2013

Хотя этот ответ технически верен, он мне не сильно помог.

"Если флаг 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 / создание-а-саунд-рекордер-в-с-и-C-Sharp /

0 голосов
/ 09 февраля 2010

Это может произойти при попытке открыть уже открытое устройство mci.

Если флаг MCI_OPEN_SHAREABLE не указан при первоначальном открытии устройства или файла, все последующие команды MCI_OPEN для устройства или файла завершатся ошибкой.

...