高人救命呀,播放和停止音频的奇怪有关问题,小弟我快要崩溃了

高人救命呀,播放和停止音频的奇怪问题,我快要崩溃了。
本人在一个对话框中调用普通类中的播放声音函数,声音正常播放,调用停止函数,立即停止。
如果直接在此普通类中的函数中调用该普通类中的播放声音函数,声音正常播放,但调用停止函数根本无法关闭声音,经常返回257,303之类的错误码。
本人试了在普通类中的函数中调用位于窗口类中的声音播放函数,也无法正常关闭,给窗口类发送消息,都可以打开声音,却无法关闭。

难道播放声音的底层函数还要挑一下是谁调用的。
以下是函数代码。
void   CTools::PlayVoice(CString   sName)
{
if(VoiceCount)
{
mciSendCommand(VoiceCount,MCI_CLOSE,0,NULL);
VoiceCount   =   0;
}
DWORD   To,Length;
CString   str;
CString   sType;
char   name[MAX_PATH];
DWORD   cdlen;
DWORD   cdfrom=0,cdto;
MCI_OPEN_PARMS   mciopenparms;//打开
MCI_PLAY_PARMS   mciplayparms;//播放
mciopenparms.lpstrElementName=sName;//播放路径
int   i   =   sName.ReverseFind( '. ');
sType   =   sName.Mid(i+1);
mciopenparms.lpstrDeviceType=sType.GetBuffer(0);//文件类型
mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO,(DWORD)(LPVOID)&mciopenparms);//向MCI设备发送命令消息
VoiceCount=mciopenparms.wDeviceID;
mciplayparms.dwCallback=(DWORD)MainHwnd;
MCI_STATUS_PARMS   mcistatusparms;
mcistatusparms.dwCallback=(DWORD)MainHwnd;
mcistatusparms.dwItem=MCI_STATUS_LENGTH;
mcistatusparms.dwReturn=0;
mciSendCommand(VoiceCount,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms);
To=Length=cdlen=mcistatusparms.dwReturn;         //得到曲目长度                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
cdto=MCI_MAKE_HMS(MCI_HMS_HOUR(cdlen),MCI_HMS_MINUTE(cdlen),MCI_HMS_SECOND(cdlen));    
mciplayparms.dwFrom=cdfrom;
mciplayparms.dwTo=cdto;
mciSendCommand(VoiceCount,MCI_PLAY,MCI_TO|MCI_FROM,(DWORD)(LPVOID)&   mciplayparms);
}

void   CTools::StopVoice()
{
MCIERROR   err;
if(VoiceCount!=0)
{
err   =   mciSendCommand(VoiceCount,MCI_PAUSE,0,NULL);
err   =   mciSendCommand(VoiceCount,MCI_CLOSE,0,NULL);
VoiceCount   =   0;
}
}


高人指教呀,方法试遍了,就差拿块豆腐撞了。