我想用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);
}

解决方案 »

  1.   

    这不是被你搞死了么?CString strPath("");
    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);
      

  2.   


    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函数的不同后,一样的有句柄的增加,继续顶.