porque MCI_OPEN falha e retorna inválido ID do dispositivo?
-
18-09-2019 - |
Pergunta
dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE
, (DWORD_PTR)(LPVOID) &mciOpenParms);
erro -mensagem é "O nome do dispositivo já está sendo usado como um alias por esta aplicação. Use um alias exclusivo."
Por que é dando um erro?
Solução 2
Isso pode acontecer quando se tenta reabrir um dispositivo MCI já aberto.
Se o sinalizador MCI_OPEN_SHAREABLE não for especificado quando um dispositivo ou arquivo é aberto inicialmente, todos MCI_OPEN posterior comandos para o dispositivo ou arquivo irá falhar.
Outras dicas
Embora tecnicamente correta, esta resposta não me ajudou muito.
"Se a bandeira MCI_OPEN_SHAREABLE não for especificado quando um dispositivo ou arquivo é aberto inicialmente, todos MCI_OPEN posterior comandos para o dispositivo ou arquivo irá falhar."
eu descobri que eu tinha que fazer uma MCI_CLOSE antes de qualquer MCI_OPEN, como este:
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
}
Além disso, aqui é um artigo muito bom sobre a programação estes dispositivos de áudio.
http : //www.c-sharpcorner.com/uploadfile/GemingLeader/creating-a-sound-recorder-in-c-and-C-Sharp/