用 mciSendCommond(wDeviceID, MCI_PALY, 0, (DWORD)(LPVOID) &mciPlayParams);播放一个音频文件,那么这个设备到底是个什么东东呢?如果是硬件的那个所谓的设备,怎么知道就是我选择的那首歌呢?疑惑不解!
    还有就是第四个参数为什么有两个(),是两次强制转换?
    请友友们给详细讲解一下吧,在此先谢过各位了!

解决方案 »

  1.   

    设备指的是MCI设备,mciPlayParams参数中可以指定你选择的那首歌的路径。
      

  2.   

    回复rebort_Q先生: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, 
                                            NULL,(DWORD)(LPVOID) &PlayP);
    if(Playflag)
            {
    return Playflag;
            }
    else
    {
    m_bPlaying = TRUE;
    return NULL;
    }
    }
    感觉不是您说的那样的,谢谢啊
      

  3.   

    你的这句代码mciSendCommand   (m_wDeviceID,   MCI_SEEK,   MCI_SEEK_TO_START,   NULL); 更改了媒体位置,应该是回到媒体开始位置。然后MCI_PLAY。
    或许你之前已经发出MCI_OPEN命令,将播放的信息传进去了,然后MCI_PLAY。
      

  4.   


    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 
    ...
      

  5.   

    DWORD CWave::Open()
    {
    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 ,这个是我已经编好的一个程序的一部分代码,只是想弄弄清楚,谢谢你几次这么热情的回复!
      

  6.   

    我是这么理解的:
    mciSendCommand的最后一个参数dwParam 就是一个command message。
    而IDDevice接收command message。
    当你Open的时候设备接收到OpenParams的信息,只要设备不再接受MCI_OPEN message,他会一直保存这个信息。
    不知道是否表达清楚?
      

  7.   

        也就是说在应用程序的代码里记录下打开的设备的ID, 当前打开的 设备 记录了文件的路径,在接收到关闭命令之前一直记录着这些信息?不知道是这样理解吗?
        还有就是mciSendCommad最后的参数之前的两个()是两次强制转换?