mciSendCommand在Win10上奔潰的問題解決/循環播放音樂

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); // 重複播放

大家有興趣可以訪問我的個站:www.stubbornhuang.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章