DWORD CALLBACK waveInProc(HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{ SYZ_TRACE("waveInProc:: hWaveIn: point[%p] uMsg==[%d]", hWaveIn, uMsg); char errorChar[256]; MMRESULT hr; //waveInGetErrorText(hr, errorChar, 256); //SYZ_TRACE("waveInGetErrorText :: hr[%d], ErrorText[%s]", hr, errorChar); if (uMsg == WIM_DATA) { WAVEHDR* pWaveHdr = (WAVEHDR*)dwParam1;//dwParam1指向WAVEHDR的地址 wWaveRecord* pWaveRecord = (wWaveRecord*)dwInstance; SYZ_TRACE("WAVEHDR stuct data: \ lpData[%p], dwBufferLength[%d], dwBytesRecorded[%d], dwUser[%p], dwFlags[%d], dwLoops[%d], lpNext[%p], reserved[%p]", pWaveHdr->lpData, pWaveHdr->dwBufferLength, pWaveHdr->dwBytesRecorded, pWaveHdr->dwUser, pWaveHdr->dwFlags, pWaveHdr->dwLoops, pWaveHdr->lpNext, pWaveHdr->reserved); pWaveRecord->Lock(); if (pWaveRecord->m_bRecording && pWaveHdr->dwBytesRecorded == MAX_BUFF_SOUNDSIZE) { SYZ_TRACE("befor call waveInUnprepareHeader"); hr = waveInUnprepareHeader(hWaveIn, pWaveHdr, sizeof(WAVEHDR)); SYZ_TRACE("waveInUnprepareHeader result [%d]", (hr== MMSYSERR_NOERROR)); waveInGetErrorText(hr, errorChar, 256); SYZ_TRACE("waveInGetErrorText :: hr[%d], ErrorText[%s]", hr, errorChar); pWaveHdr->dwBytesRecorded = 0; pWaveHdr->dwFlags = 0; SYZ_TRACE("befor call waveInPrepareHeader"); hr = waveInPrepareHeader(hWaveIn, pWaveHdr, sizeof(WAVEHDR)); SYZ_TRACE("waveInPrepareHeader result [%d]", (hr == MMSYSERR_NOERROR)); waveInGetErrorText(hr, errorChar, 256); SYZ_TRACE("waveInGetErrorText :: hr[%d], ErrorText[%s]", hr , errorChar); hr = waveInAddBuffer(hWaveIn, pWaveHdr, sizeof(WAVEHDR)); SYZ_TRACE("waveInAddBuffer result [%d]", (hr == MMSYSERR_NOERROR)); waveInGetErrorText(hr, errorChar, 256); SYZ_TRACE("waveInGetErrorText :: hr[%d], ErrorText[%s]", hr , errorChar); } else { //clear dirty data memset(pWaveHdr->lpData, 0, MAX_BUFF_SOUNDSIZE); } pWaveRecord->Unlock(); } return 0;}