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));
}
}
而换成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));
}
}
解决方案 »
- SetROP2设置CPen没效果
- VC中有关编辑框的问题,请高手指点。
- 求助:DeviceObject->DeviceQueue 得到的是对象还是指针?
- InternetReadFileEx的问题
- 一个关于MSDN中MFC胖程序的问题 请高手帮忙
- 如何实现可视区域反向打印输出
- 求救:那里能找到CMSHFlexGrid或者CMSFlexGrid这两个类的用法?
- 请问如何将lpbyte类型转换为CString?
- CXX0033: Error: error in OMF type information
- 如何得到这些坐标值?
- 注入进程的退出错误——关于dll的摸索?(续)
- 请问哪有关于NAT穿透的资料么?
我调试看,发现waveInOpen调用后进入WaveInProc1,是OPEN消息,然后没返回就出异常了,
我试着再WaveInProc1里建立OPEN消息分支 并提供缓冲,但是仍旧出异常,
不解亚!!!!
是什么错误,总有个错误码吧。waveInOpen的返回值是什么?第一次调用waveInOpen后关闭了吗?