dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE
, (DWORD_PTR)(LPVOID) &mciOpenParms);
錯誤-message是「設備名稱已被用作此應用程序的別名,請使用唯一的別名。」爲什麼MCI_OPEN失敗並返回無效的設備ID?
它爲什麼會給出錯誤?
dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE
, (DWORD_PTR)(LPVOID) &mciOpenParms);
錯誤-message是「設備名稱已被用作此應用程序的別名,請使用唯一的別名。」爲什麼MCI_OPEN失敗並返回無效的設備ID?
它爲什麼會給出錯誤?
當試圖重新打開已打開的mci設備時可能會發生這種情況。
如果在初次打開設備或文件時沒有指定MCI_OPEN_SHAREABLE標誌,那麼對設備或文件的所有後續MCI_OPEN命令都將失敗。
雖然技術上是正確的,但這個答案並沒有多大幫助。
「如果在最初打開設備或文件時未指定MCI_OPEN_SHAREABLE標誌,則後續對設備或文件的所有MCI_OPEN命令都將失敗。」
我發現我有任何MCI_OPEN之前做一個MCI_CLOSE,像這樣:
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/