waveInOpen中采用函数方式,为什么程序总出异常?
而换成CALLBACK_THREAD方式就不会出错?
代码如下:
 MMRESULT mmRet = ::waveInOpen( &m_hRecord, WAVE_MAPPER,
        &m_stWaveFormatEx, ( DWORD )WaveInProc1,GetCurrentThreadId(), CALLBACK_FUNCTION);static void WaveInProc1(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
    if (WIM_DATA == uMsg)
    {
        LPWAVEHDR lpHdr = (LPWAVEHDR) dwParam1;
        
        
        if(lpHdr->dwBytesRecorded==0 || lpHdr==NULL)
            return ;
        
        ::waveInUnprepareHeader(hwi, lpHdr, sizeof(WAVEHDR));
        
         if(lpHdr->lpData!=NULL )
        {
            printf("WaveInProc data :%d\r\n",lpHdr->dwBytesRecorded);
         }        //Reuse the old buffer
        ::waveInPrepareHeader(hwi,lpHdr, sizeof(WAVEHDR));
        ::waveInAddBuffer(hwi, lpHdr, sizeof(WAVEHDR));
    }
}

解决方案 »

  1.   

    楼主没有给WAVEHDR的lpData提供缓冲吧
      

  2.   

    提供了,关键是再调用waveInOpen时就已经出异常了
    我调试看,发现waveInOpen调用后进入WaveInProc1,是OPEN消息,然后没返回就出异常了,
    我试着再WaveInProc1里建立OPEN消息分支 并提供缓冲,但是仍旧出异常,
    不解亚!!!!
      

  3.   

    在调用waveInOpen出异常?
    是什么错误,总有个错误码吧。waveInOpen的返回值是什么?第一次调用waveInOpen后关闭了吗?