1 Win7下使用mciSendCommand播放音乐的代码

    /* 2 MCI方式播放音乐 */
    if (!m_Mp3FilePath.empty())
    {
        m_MciOpen.lpstrDeviceType = "mpegvideo"; //要操作的文件类型  
        m_MciOpen.lpstrElementName = m_Mp3FilePath.c_str(); //要操作的文件路径  
        MCIERROR mcierror = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&m_MciOpen); //打开文件命令  
        if (mcierror)
        {

        }
        else
        {
            m_MciPlay.dwCallback = (DWORD)NULL;
            m_MciPlay.dwFrom = (DWORD)0; //播放起始位置ms为单位  
            mciSendCommand(m_MciOpen.wDeviceID, MCI_PLAY, MCI_NOTIFY | MCI_FROM, (DWORD)&m_MciPlay);
        }
    }

最先从网上抄的这段很酸爽的代码,在win7开发打包运行都没事,然后一把程序发布到Win10上运行一下子就崩溃。

2 Win10下使用mciSendCommand播放音乐的正确代码代码

认真查看了微软的文档的之后发现,

MCIERROR mcierror = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&m_MciOpen);

中使用的是DWORD_PTR,而不是DWORD。
然后就把代码改成下面这样的:

    /* 2 MCI方式播放音乐 */
    if (!m_Mp3FilePath.empty())
    {
        m_MciOpen.lpstrDeviceType = "mpegvideo"; //要操作的文件类型  
        m_MciOpen.lpstrElementName = m_Mp3FilePath.c_str(); //要操作的文件路径  
        MCIERROR mcierror = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD_PTR)&m_MciOpen); //打开文件命令  
        if (mcierror)
        {

        }
        else
        {
            m_MciPlay.dwCallback = (DWORD)NULL;
            m_MciPlay.dwFrom = (DWORD)0; //播放起始位置ms为单位  
            mciSendCommand(m_MciOpen.wDeviceID, MCI_PLAY, MCI_NOTIFY | MCI_FROM, (DWORD_PTR)&m_MciPlay);
        }
    }

果然可以了。

3 循环播放音乐

将:

mciSendCommand(m_MciOpen.wDeviceID, MCI_PLAY, MCI_NOTIFY | MCI_FROM, (DWORD_PTR)&m_MciPlay);

修改为

mciSendCommand(m_MciOpen.wDeviceID, MCI_PLAY, MCI_DGV_PLAY_REPEAT, (DWORD_PTR)&m_MciPlay); // 重复播放

如果您觉得对您有帮助,可以请站长喝一杯咖啡哦!

记得在赞赏备注里写上您的昵称

您可在本站资助名单中查看你的打赏记录哦!

支付宝扫一扫

微信扫一扫

金额随意,礼清义重

当前分类随机文章推荐

全站随机文章推荐

关于本站站长 StubbornHuang
mciSendCommand在Win10上奔溃的问题解决/循环播放音乐-StubbornHuang Blog纵使晴明无雨色,入云深处亦沾衣。