用 mciSendCommond(wDeviceID, MCI_PALY, 0, (DWORD)(LPVOID) &mciPlayParams);播放一个音频文件,那么这个设备到底是个什么东东呢?如果是硬件的那个所谓的设备,怎么知道就是我选择的那首歌呢?疑惑不解!
还有就是第四个参数为什么有两个(),是两次强制转换?
请友友们给详细讲解一下吧,在此先谢过各位了!
还有就是第四个参数为什么有两个(),是两次强制转换?
请友友们给详细讲解一下吧,在此先谢过各位了!
{
Stop ();
MCI_PLAY_PARMS PlayP;
mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
DWORD Playflag = mciSendCommand(m_wDeviceID, MCI_PLAY,
NULL,(DWORD)(LPVOID) &PlayP);
if(Playflag)
{
return Playflag;
}
else
{
m_bPlaying = TRUE;
return NULL;
}
}
感觉不是您说的那样的,谢谢啊
或许你之前已经发出MCI_OPEN命令,将播放的信息传进去了,然后MCI_PLAY。
MCI_OPEN_PARMS mciOP;
DWORD dwReturn;
ASSERT(m_wID==NULL); mciOP.lpstrDeviceType=NULL;
mciOP.lpstrElementName=strPath;//播放文件路径
dwReturn=mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT | MCI_OPEN_SHAREABLE,
(DWORD)(LPVOID)&mciOP);
if(dwReturn==0)
{
...
}else
...
{
Close ();
DWORD Openflag;
MCI_OPEN_PARMS OpenParams;
OpenParams.lpstrDeviceType = "waveaudio";
OpenParams.lpstrElementName = m_strPath; //播放文件路径
Openflag = mciSendCommand (NULL, MCI_OPEN, MCI_OPEN_ELEMENT
| MCI_OPEN_TYPE, (DWORD)(LPVOID) &OpenParams);
if(Openflag)
return Openflag;
Openflag = NULL;
m_wDeviceID = OpenParams.wDeviceID;
m_bOpen = TRUE;
MCI_SET_PARMS SetParams;
SetParams.dwTimeFormat = MCI_FORMAT_MILLISECONDS;
Openflag = mciSendCommand(m_wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,
(DWORD)(LPVOID) &SetParams);
if(Openflag)
return Openflag;
return NULL;
}
DWORD CWave::Play ()
{
Stop ();
MCI_PLAY_PARMS PlayP;
mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
DWORD Playflag = mciSendCommand(m_wDeviceID, MCI_PLAY, ULL,
(DWORD)(LPVOID) &PlayP);
if(Playflag)
{
return Playflag;
}
else
{
m_bPlaying = TRUE;
return NULL;
}
}
OpenParams的生命周期只是在Open()里,Play()和Open()相同的只是设备的ID ,这个是我已经编好的一个程序的一部分代码,只是想弄弄清楚,谢谢你几次这么热情的回复!
mciSendCommand的最后一个参数dwParam 就是一个command message。
而IDDevice接收command message。
当你Open的时候设备接收到OpenParams的信息,只要设备不再接受MCI_OPEN message,他会一直保存这个信息。
不知道是否表达清楚?
还有就是mciSendCommad最后的参数之前的两个()是两次强制转换?