用VC写了一个播放器,编译没有异常,但是运行后一播放就死在那儿,高手看一上咋回事
用VC写了一个播放器,编译没有错误,但是运行后一播放就死在那儿,高手看一下怎么回事
小弟实在是太菜,这代码也简单的不能再简单了:
void CMediaplayerDlg::OnButton2()
{
MCI_OPEN_PARMS open={0};
char str1[100];
POSITION pos=m_list1.GetFirstSelectedItemPosition();
if(pos==NULL)
{
MessageBox("没有选择歌曲","提示",MB_OK);
}
else
{
int nItem=m_list1.GetNextSelectedItem(pos);
CString str=m_list1.GetItemText(nItem,2);
open.lpstrElementName=str;
open.lpstrDeviceType="mpegvideo";
DWORD err;
err=mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT|MCI_WAIT,(DWORD)(LPVOID)&open);
if(err==0)
{
MCI_PLAY_PARMS play;
play.dwFrom=0;
play.dwCallback=NULL;
mciSendCommand(open.wDeviceID,MCI_PLAY,0,(DWORD)&play);
}
else
{
mciGetErrorString(err,(LPSTR)str1,100);
MessageBox(str1);
}
}
}
------解决方案--------------------
不能沉掉。。。。
------解决方案--------------------
open.lpstrDeviceType="mpegvideo";//??
//好的是:
mciOpenParms.lpstrDeviceType=(LPSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
------解决方案--------------------
改成你的那个代码还是没有用,我试了别人编写的代码生成的工程打开文件后也是“程序无响应”,然后死在那儿了,有什么办法可以解决吗?
------解决方案--------------------
改成你的那个代码还是没有用,我试了别人编写的代码生成的工程打开文件后也是“程序无响应”,然后死在那儿了,有什么办法可以解决吗?
------解决方案--------------------
windows那个播放的api实在是太不稳定了,google一下吧,有好多人都遇到过
------解决方案--------------------
是不是文件路径问题,好像mci这个函数只认识短路径和文件名
你可以将文件路径名称转为短格式再播放,或者先放到c盘根目录去测试一下,当然文件名也改为8.3格式的
------解决方案--------------------
参考CWave:
小弟实在是太菜,这代码也简单的不能再简单了:
void CMediaplayerDlg::OnButton2()
{
MCI_OPEN_PARMS open={0};
char str1[100];
POSITION pos=m_list1.GetFirstSelectedItemPosition();
if(pos==NULL)
{
MessageBox("没有选择歌曲","提示",MB_OK);
}
else
{
int nItem=m_list1.GetNextSelectedItem(pos);
CString str=m_list1.GetItemText(nItem,2);
open.lpstrElementName=str;
open.lpstrDeviceType="mpegvideo";
DWORD err;
err=mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT|MCI_WAIT,(DWORD)(LPVOID)&open);
if(err==0)
{
MCI_PLAY_PARMS play;
play.dwFrom=0;
play.dwCallback=NULL;
mciSendCommand(open.wDeviceID,MCI_PLAY,0,(DWORD)&play);
}
else
{
mciGetErrorString(err,(LPSTR)str1,100);
MessageBox(str1);
}
}
}
------解决方案--------------------
不能沉掉。。。。
------解决方案--------------------
open.lpstrDeviceType="mpegvideo";//??
//好的是:
mciOpenParms.lpstrDeviceType=(LPSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
------解决方案--------------------
改成你的那个代码还是没有用,我试了别人编写的代码生成的工程打开文件后也是“程序无响应”,然后死在那儿了,有什么办法可以解决吗?
------解决方案--------------------
改成你的那个代码还是没有用,我试了别人编写的代码生成的工程打开文件后也是“程序无响应”,然后死在那儿了,有什么办法可以解决吗?
------解决方案--------------------
windows那个播放的api实在是太不稳定了,google一下吧,有好多人都遇到过
------解决方案--------------------
是不是文件路径问题,好像mci这个函数只认识短路径和文件名
你可以将文件路径名称转为短格式再播放,或者先放到c盘根目录去测试一下,当然文件名也改为8.3格式的
------解决方案--------------------
参考CWave:
DWORD CWave::Play(CWnd* pWnd,LPCSTR pFileName)
{
MCI_OPEN_PARMS mciOpenParms;
//initialize structure
memset(&mciOpenParms,0,sizeof(MCI_OPEN_PARMS));
// mciOpenParms.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_SEQUENCER;//MIDI类型
// mciOpenParms.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
//set the file name to be played
mciOpenParms.lpstrElementName=pFileName;
//first open the device
DWORD dwResult=mciSendCommand(m_nDeviceID,MCI_OPEN, MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpenParms);
//display error message if failed
if(dwResult)
{
DisplayErrorMsg(dwResult);
}
else //if successful,instruct the device to play the WAV file
{
//save element indentifier
m_nElementID=mciOpenParms.wDeviceID;
MCI_PLAY_PARMS mciPlayParms;