打开:
m_mciOpen.lpstrElementName = filename;
m_strFileName = filename;
if(mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)&m_mciOpen))
{
return FALSE;
}
在关闭时
mciSendCommand(m_mciOpen.dwDeviceID,MCI_CLOSE,0,NULL)
总是异常。如何解决?

解决方案 »

  1.   

    mciID = mciGetDeviceID(AVI_VIDEO);
    mciSendCommand(mciID, MCI_CLOSE, 0L,
                       (DWORD)(LPMCI_GENERIC_PARMS)&mciClose);
      

  2.   

    DWORD CWave::OpenDevice()
    {
    DWORD dwResult=0;
    if (m_nDeviceID)MCI_OPEN_PARMS mciOpenParms;
    mciOpenParms.lpstrDeviceType=(LPSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
    //open the wave device
    dwResult=mciSendCommand(NULL,MCI_OPEN,
    MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_WAIT,
    (DWORD)(LPVOID)&mciOpenParms);
    //save device identifier,will use eith other MCI commands
    m_nDeviceID=mciOpenParms.wDeviceID;
    //display error message if failed
    if(dwResult)
    DisplayErrorMsg(dwResult);
    }
    //return result of MCI operation
    return dwResult;
    }DWORD CWave::CloseDevice()
    {
    DWORD dwResult=0;//close if currently open
    if(m_nDeviceID)
    {//close the MCI device
    dwResult=mciSendCommand(m_nDeviceID,MCI_CLOSE,NULL,NULL);//display error message if failed
    if(dwResult)
    DisplayErrorMsg(dwResult);//set identifier to close state
    else
    m_nDeviceID=0;
    }
      

  3.   

    我要播放的是影视文件,没有指定设备类型,直接用Close总是异常。谁知道如何解决?
      

  4.   

    mciSendCommand(DeviceID,MCI_CLOSE,0,0);
      

  5.   

    mciSendCommand(DeviceID,MCI_CLOSE,0,0);
    异常
      

  6.   

    DWORD  wDeviceID;//公共变量
    播放:
    void CMyWnd::Play(CString str)
    {
    if(str=="")
    {
    MCI_DGV_PLAY_PARMS mciPlay;
        DWORD dwFlags=0; 
        mciSendCommand(wDeviceID,MCI_PLAY,dwFlags,
       (DWORD)(LPVOID)&mciPlay);    }
    else
    {
           if(wDeviceID!=0)
       { 
          mciSendCommand(wDeviceID,MCI_CLOSE,NULL,NULL); 
       }
           wDeviceID=0; 
       DWORD dwReturn;  
       MCI_DGV_OPEN_PARMS mciOpen;  
       mciOpen.lpstrElementName=(LPSTR)str.GetBuffer(0);
           mciOpen.wDeviceID=0;
       mciOpen.hWndParent=CWnd::GetSafeHwnd();
       mciOpen.dwStyle=WS_CHILD; 
       dwReturn=mciSendCommand(0,MCI_OPEN,(DWORD)
      (MCI_OPEN_ELEMENT|MCI_DGV_OPEN_PARENT 
            |MCI_DGV_OPEN_WS),
      (DWORD)(LPSTR)&mciOpen); 
       wDeviceID=mciOpen.wDeviceID;
       //////////////////////////
       MCI_DGV_PUT_PARMS PutParms;
       PutParms.rc.left=0;
           PutParms.rc.top=0;
       PutParms.rc.right=ix;
       PutParms.rc.bottom=iy;
       mciSendCommand(wDeviceID,MCI_PUT,MCI_WAIT|
    MCI_DGV_PUT_CLIENT|
    MCI_DGV_PUT_WINDOW|MCI_DGV_RECT,
    (DWORD)(LPVOID)&PutParms);
    ////////////////////////////////
       MCI_DGV_PLAY_PARMS mciPlay;
       DWORD dwFlags=0; 
       mciSendCommand(wDeviceID,MCI_PLAY,dwFlags,
    (DWORD)(LPVOID)&mciPlay);    }

    void CMyWnd::Pause()
    {    MCI_DGV_PAUSE_PARMS PauseParms;
    mciSendCommand(wDeviceID,MCI_PAUSE,0,(DWORD)(LPVOID)
    &PauseParms);
    }
    关闭:
    void CMyWnd::Close()
    {
    if(wDeviceID!=0)
       { 
          mciSendCommand(wDeviceID,MCI_CLOSE,NULL,NULL); 
       }
           }