我想用mciSendString来播放音乐,很简单的几句话,发现调用一次后,里面就有句柄未释放,如果循环调用,情况会更糟,不知道是否我哪里没有写正确,现在帖上来,希望大家帮我分析下.谢谢.
CString s, s2;
s2 = _T("D:\\aa.mp3");
while (1)
{
s.Format(_T("open \"%s\" type MPEGVideo alias OpenFile"), s2);
MCIERROR me=mciSendString(s, NULL, 0, 0);
mciSendString(_T("Play OpenFile wait"), NULL, 0, 0);
mciSendString(_T("close OpenFile"), NULL, 0, 0);
}
CString s, s2;
s2 = _T("D:\\aa.mp3");
while (1)
{
s.Format(_T("open \"%s\" type MPEGVideo alias OpenFile"), s2);
MCIERROR me=mciSendString(s, NULL, 0, 0);
mciSendString(_T("Play OpenFile wait"), NULL, 0, 0);
mciSendString(_T("close OpenFile"), NULL, 0, 0);
}
MCI_OPEN_PARAMS mciOP;
mciOP.lpstrDeviceType = NULL;
mciOP.lpstrElementName = strPath; // MP3文件所在路径
DWORD dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT | MCI_OPEN_SHAREABLE, (DWORD)(LPVOID) &mciOP);
MCIDEVICEID wID;
if (dwReturn == 0)
{
wID = mciOP.wDeviceID;
}
else
{
wID = NULL;
}MCI_PLAY_PARMS mciPP;
DWORD dw = mciSendCommand(wID, MCI_PLAY, MCI_NOTIFY, (DWORD)(LPVOID)&mciPP);
CString strPath("D:\\AA.mp3");
MCI_OPEN_PARMS mciOP;
mciOP.lpstrDeviceType = NULL;
mciOP.lpstrElementName = strPath; // MP3文件所在路径
DWORD dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT | MCI_OPEN_SHAREABLE, (DWORD)(LPVOID) &mciOP);
MCIDEVICEID wID;
if (dwReturn == 0)
{
wID = mciOP.wDeviceID;
}
else
{
wID = NULL;
}
MCI_PLAY_PARMS mciPP;
DWORD dw = mciSendCommand(wID, MCI_PLAY, MCI_WAIT, (DWORD)(LPVOID)&mciPP);
mciSendCommand(wID, MCI_CLOSE, NULL, NULL);
改成一楼的方法,只是改了API函数的不同后,一样的有句柄的增加,继续顶.