//先打开一个文件
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了,难道没有释放干净吗?求解
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的音量
西沟函数会自动关闭。
至于你的错误,可以对照里面的查看。
http://download.csdn.net/source/2511288