代码之家  ›  专栏  ›  技术社区  ›  Ashish

为什么mci_open失败并返回无效的设备ID?

mci
  •  0
  • Ashish  · 技术社区  · 14 年前
    dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE
                             , (DWORD_PTR)(LPVOID) &mciOpenParms);
    

    错误-消息为“设备名称已被此应用程序用作别名。使用唯一的别名。“

    为什么会出错?

    2 回复  |  直到 11 年前
        1
  •  1
  •   user5108_Dan    11 年前

    虽然技术上是正确的,但这个答案对我没有多大帮助。

    如果在设备或文件最初打开时未指定mci_open_shareable标志,则设备或文件的所有后续mci_open命令都将失败。

    我发现我必须在任何MCI打开之前关闭MCI,就像这样:

    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/

        2
  •  0
  •   Ashish    14 年前

    当试图重新打开已打开的MCI设备时,可能会发生这种情况。

    如果在设备或文件最初打开时未指定mci_open_shareable标志,则设备或文件的所有后续mci_open命令都将失败。