将VC6录音程序移植到VS2010遇到问题

打扰大家了!原程序是常见的VC录音程序,代码在此http://www.newxing.com/S4D48945F1501/audio2Dlg.cpp估计很多大牛都使用过,由于网上找不到现成的VS2010录音程序,LZ将VC程序移植至VS2010,稍作修改后编译通过,但遇到问题
“815.exe 中的 0x00353176 处最可能的异常: 0xC0000005: 写入位置 0xcccccccc 时发生访问冲突”
无法进行录音(如图最后一行),请问如何解决?(或者哪位可以提供现成的Demo)感激不尽!

调试时应该是在此行出现上述错误

关于录音部分的代码如下
// TODO: 在此添加控件通知处理程序代码
pBuffer1=(PBYTE)malloc(INP_BUFFER_SIZE);
pBuffer2=(PBYTE)malloc(INP_BUFFER_SIZE);
if (!pBuffer1 || !pBuffer2) {
if (pBuffer1) free(pBuffer1);
if (pBuffer2) free(pBuffer2);
MessageBeep(MB_ICONEXCLAMATION); //播放由SystemExclamation定义的声音
MessageBox(_T("Memory erro!"));
return ;
}

//open waveform audo for input

waveform.wFormatTag=WAVE_FORMAT_PCM; //设置波形的格式 PCM格式
waveform.nChannels=1; //设置音频文件的通道数量
waveform.nSamplesPerSec=11025; //设置每个声道播放和记录时的样本频率
waveform.nAvgBytesPerSec=11025; //设置请求的平均数据传输率
waveform.nBlockAlign=1; //以字节为单位设置块对齐
waveform.wBitsPerSample=8; //根据wFormatTag的类型设置每个样本的位深 如果wFormatTag= WAVE_FORMAT_PCM,此值应该设为8或16
waveform.cbSize=0; //额外信息的大小,以字节为单位
if (waveInOpen(&hWaveIn,WAVE_MAPPER,&waveform,(DWORD)this->m_hWnd,NULL,CALLBACK_WINDOW)) { //waveInOpen是动态连接库winmm.dll之函数,用以开启波形输入设备
free(pBuffer1);
free(pBuffer2);
MessageBeep(MB_ICONEXCLAMATION);
MessageBox(_T("Audio can not be open!"));
}
pWaveHdr1->lpData=(LPTSTR)pBuffer1; //指向波形数据缓冲区
pWaveHdr1->dwBufferLength=INP_BUFFER_SIZE; //波形数据缓冲区的长度
pWaveHdr1->dwBytesRecorded=0; //若首部用于输入, 指出缓冲区中的数据量
pWaveHdr1->dwUser=0; //指定用户的32位数据
pWaveHdr1->dwFlags=0; //缓冲区标志
pWaveHdr1->dwLoops=1; //循环播放次数, 仅用于输出缓冲区
pWaveHdr1->lpNext=NULL; //保留
pWaveHdr1->reserved=0; //保留

waveInPrepareHeader(hWaveIn,pWaveHdr1,sizeof(WAVEHDR)); //为波形输入准备一个缓冲区
pWaveHdr2->lpData=(LPTSTR)pBuffer2;
pWaveHdr2->dwBufferLength=INP_BUFFER_SIZE;
pWaveHdr2->dwBytesRecorded=0;
pWaveHdr2->dwUser=0;
pWaveHdr2->dwFlags=0;
pWaveHdr2->dwLoops=1;
pWaveHdr2->lpNext=NULL;
pWaveHdr2->reserved=0;

waveInPrepareHeader(hWaveIn,pWaveHdr2,sizeof(WAVEHDR));

//////////////////////////////////////////////////////////////////////////
pSaveBuffer = (PBYTE)realloc (pSaveBuffer, 1) ; //改变pSaveBuff内存所指大小 为 1
// Add the buffers

waveInAddBuffer (hWaveIn, pWaveHdr1, sizeof (WAVEHDR)) ; //向波形输入设备发送一个输入缓冲区
waveInAddBuffer (hWaveIn, pWaveHdr2, sizeof (WAVEHDR)) ;

bEnding = FALSE ;
dwDataLength = 0 ;
waveInStart (hWaveIn) ; //启动输入 的waveInStart功能开始在给定的波形音频输入设备的输入。
...全文
421 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 21 楼 u010030181 的回复:
[quote=引用 20 楼 GCTPIE 的回复:]
你这每次截一半东西出来,没前文也没下文,又不是神仙……你还不如直接把你这个工程放出来,大家或许还更容易找到问题,这样没头没尾的东西,要找出问题得多麻烦……[/quote] 有道理……不过估计也没多少人看,干脆重新写一遍,之前编译出现过的错误除了问题提出的以外都一遍过了,想到哪写到哪,也就当整理一下思路吧。 http://blog.csdn.net/gctpie/article/details/47836197[/quote] 你把整个工程发一个放到一个地方,这样只看cpp貌似没问题的~[/quote] http://pan.baidu.com/s/1hq2HUYg 这是整个工程……我发现Resource.h有点问题,稍微又改了一下
  • 打赏
  • 举报
回复
问题已解决!结贴~
  • 打赏
  • 举报
回复
引用 21 楼 u010030181 的回复:
[quote=引用 20 楼 GCTPIE 的回复:]

你这每次截一半东西出来,没前文也没下文,又不是神仙……你还不如直接把你这个工程放出来,大家或许还更容易找到问题,这样没头没尾的东西,要找出问题得多麻烦……[/quote]
有道理……不过估计也没多少人看,干脆重新写一遍,之前编译出现过的错误除了问题提出的以外都一遍过了,想到哪写到哪,也就当整理一下思路吧。

http://blog.csdn.net/gctpie/article/details/47836197[/quote]
你把整个工程发一个放到一个地方,这样只看cpp貌似没问题的~[/quote]

问题更新:改Resource.h后内存问题表面上似乎解决了,但现在连编译都没通过



赵4老师 2015-08-21
  • 打赏
  • 举报
回复
使用bass库录音?
QIUSQJF 2015-08-21
  • 打赏
  • 举报
回复
引用 20 楼 GCTPIE 的回复:
你这每次截一半东西出来,没前文也没下文,又不是神仙……你还不如直接把你这个工程放出来,大家或许还更容易找到问题,这样没头没尾的东西,要找出问题得多麻烦……[/quote] 有道理……不过估计也没多少人看,干脆重新写一遍,之前编译出现过的错误除了问题提出的以外都一遍过了,想到哪写到哪,也就当整理一下思路吧。 http://blog.csdn.net/gctpie/article/details/47836197[/quote] 你把整个工程发一个放到一个地方,这样只看cpp貌似没问题的~
  • 打赏
  • 举报
回复
[/quote] 你这每次截一半东西出来,没前文也没下文,又不是神仙……你还不如直接把你这个工程放出来,大家或许还更容易找到问题,这样没头没尾的东西,要找出问题得多麻烦……[/quote] 有道理……不过估计也没多少人看,干脆重新写一遍,之前编译出现过的错误除了问题提出的以外都一遍过了,想到哪写到哪,也就当整理一下思路吧。 http://blog.csdn.net/gctpie/article/details/47836197
QIUSQJF 2015-08-21
  • 打赏
  • 举报
回复
引用 18 楼 GCTPIE 的回复:
[quote=引用 17 楼 u010030181 的回复:]
pWaveHdr1、pWaveHdr1
没有初始化分配内存吧?要分配内存才能使用,原工程在InitDialog初始化了……
已经初始化了,现在依然有冲突问题,调用堆栈后注意绿色箭头所指的这一行 不知是何用意。 [/quote] 你这每次截一半东西出来,没前文也没下文,又不是神仙……你还不如直接把你这个工程放出来,大家或许还更容易找到问题,这样没头没尾的东西,要找出问题得多麻烦……
  • 打赏
  • 举报
回复
引用 17 楼 u010030181 的回复:
pWaveHdr1、pWaveHdr1
没有初始化分配内存吧?要分配内存才能使用,原工程在InitDialog初始化了……

已经初始化了,现在依然有冲突问题,调用堆栈后注意绿色箭头所指的这一行

不知是何用意。
QIUSQJF 2015-08-21
  • 打赏
  • 举报
回复
pWaveHdr1、pWaveHdr1
没有初始化分配内存吧?要分配内存才能使用,原工程在InitDialog初始化了……
  • 打赏
  • 举报
回复
求帮助!非常急!
  • 打赏
  • 举报
回复
求帮助!非常急!
  • 打赏
  • 举报
回复
引用 14 楼 GCTPIE 的回复:
[quote=引用 13 楼 zhao4zhong1 的回复:] “815.exe 中的 0x00353176 处最可能的异常: 0xC0000005: 写入位置 0xcccccccc 时发生访问冲突”对话框呢?
没有弹出对话框,只是停在那里不动了,同时显示1楼的错误,只能点确定或停止调试才能退出。[/quote] 可以点击“stop”但也没有反应
  • 打赏
  • 举报
回复
引用 13 楼 zhao4zhong1 的回复:
“815.exe 中的 0x00353176 处最可能的异常: 0xC0000005: 写入位置 0xcccccccc 时发生访问冲突”对话框呢?
没有弹出对话框,只是停在那里不动了,同时显示1楼的错误,只能点确定或停止调试才能退出。
  • 打赏
  • 举报
回复
引用 7 楼 Saleayas 的回复:
如果不是这个断言的错误。 那么就是你的 waveInOpen 的 dwCallback 参数错误。这个参数不是 HWND ,而是一个 waveInProc
这个……并不是很懂,有没有实际可操作的办法呢
Saleayas 2015-08-20
  • 打赏
  • 举报
回复
如果不是这个断言的错误。 那么就是你的 waveInOpen 的 dwCallback 参数错误。这个参数不是 HWND ,而是一个 waveInProc
  • 打赏
  • 举报
回复
引用 5 楼 Saleayas 的回复:
ASSERT(pWaveHdr1); 在使用指针之前添加一个断言。
没有帮助,依然是上述错误。
Saleayas 2015-08-20
  • 打赏
  • 举报
回复
ASSERT(pWaveHdr1); 在使用指针之前添加一个断言。
赵4老师 2015-08-20
  • 打赏
  • 举报
回复
“815.exe 中的 0x00353176 处最可能的异常: 0xC0000005: 写入位置 0xcccccccc 时发生访问冲突”对话框呢?
  • 打赏
  • 举报
回复



引用 11 楼 zhao4zhong1 的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

没有弹出崩溃框,只是一直停在上图,调试框也是白的。“直到能看懂为止”是什么意思?
赵4老师 2015-08-20
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
加载更多回复(5)

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧