//先打开一个文件
MCIERROR ret = mciSendCommand( NULL, MCI_OPEN, MCI_OPEN_ALIAS|MCI_OPEN_TYPE|MCI_OPEN_ELEMENT|MCI_WAIT, (DWORD_PTR)&mop );
//然后播放
mciSendCommand( mop.wDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD_PTR)&mpp );
//然后暂停并关闭
mciSendCommand( mop2.wDeviceID, MCI_STOP, 0, 0 );
mciSendCommand( mop2.wDeviceID, MCI_CLOSE, 0, 0 );
//sleep
sleep(100);
//然后继续重复以上过程进行循环播放,发现播放了10几次后内存不断增长,时间久了就崩溃了,不知道大家遇到这种问题没有,我觉得我都close了,难道没有释放干净吗?求解

解决方案 »

  1.   

    给你个mciSendCommand封装起来的类,头文件如下:
    class CfyMCI{private: CfyMCI(const CfyMCI &);//禁止复制 CfyMCI& operator=(const CfyMCI &);//禁止拷贝public:    CfyMCI();    ~CfyMCI();    explicit CfyMCI(LPCTSTR szFileName);    operator BOOL()const;    HWND GetCallBack()const;    void SetCallBack(HWND hWnd);public:    MCIERROR OpenFileA(LPCSTR);    MCIERROR OpenFileW(LPCWSTR);    MCIERROR OpenFile(LPCTSTR);    MCIERROR PlayA(LPCSTR);    MCIERROR PlayW(LPCWSTR);    MCIERROR Play(LPCTSTR);    MCIERROR Play(DWORD dwFrom=MCI_ERROR, DWORD dwTo=MCI_ERROR);//默认值是从当前位置到末尾    MCIERROR Pause();    MCIERROR Seek(DWORD dwTo);//毫秒为单位//Seek之后,播放会停止.    MCIERROR Seek(DWORD dwHr,DWORD dwMn,DWORD dwSc,DWORD dwMl=0);//时分秒毫秒//Seek之后,播放会停止.    MCIERROR Stop();    MCIERROR Close();    MCIERROR AddVolume(int dwVol);//dwVol为负表示减小音量    MCIERROR SetVolume(DWORD dwVol);//0-1000    DWORD    GetVolume()const;    DWORD    GetPosition()const;//返回毫秒数    LPCTSTR  GetPositionStr()const;//返回00:00的格式    DWORD    GetLength()const;//返回毫秒数    LPCTSTR  GetLengthStr()const;//返回00:00的格式    LPCTSTR  GetFileName()const;    DWORD    GetPlayStatus()const;//↓    static   LPCTSTR GetErrorString(MCIERROR);private:    MCIDEVICEID m_mci_DID;    DWORD       m_dwCallBack;//MM_MCINOTIFY     TCHAR       m_szFileName[MAX_PATH];};
    看成员函数名字就可以知道怎么用:
    CfyMCI msc;
    msc.Play(TEXT("E:\\msc.mp3"));//播放
    msc.AddVolume(-500);//减小500的音量
    西沟函数会自动关闭。
    至于你的错误,可以对照里面的查看。
      

  2.   

    ..忘了给链接:
    http://download.csdn.net/source/2511288