CE6.0在VS2005的应用程序,按钮响应函数中,出现奇怪错误,求指教!

陪你去看南极光 2013-12-27 10:14:00
在下在调指纹模块的应用程序。从模块厂家要来的Demo是用EVC开发的,我在VS2005下转换项目文件格式后,打开成功,修改了个别错误,调试通过,在板子上运行没问题。

怪事出现了,为什么按钮的响应函数里调用局部数组出错,改成全局的就行?数组都挺大,70KB,70000多元素。。。

我在VS2005下自己新建一个CE下的MFC应用程序,照葫芦画瓢,抽取了“打开设备”、“采集图像”两个模块,运行一直出错:
,怎么改也不奏效。
昨天瞎碰,把按钮响应函数的局部数组改为全局数组,程序又往下走了一段!就是把下面的
ImgData拿到文件开头全局定义。本来卡在这句定义出错,修改后,停在了ret = PSUpImage这句。
//unsigned char ImgData[IMAGE_SIZE]; 

pMyDlg->ShowInfo(L"Download Pic...");

ret = PSUpImage(nDevAddr,ImgData,&ImgLen); //上传图象,此为第三方DLL库函数
// CString str;
// str.Format(_T("ImgLen = %d"),ImgLen);
// AfxMessageBox(str);

WriteLogFile("GenImg 6\r\n");


由于PSUpImage()函数是第三方DLL函数,查不出原因,但DLL有源码,于是把它的源码直接加到项目中,一起编译。发现程序卡在了PSUpImage()函数的下面:
//	unsigned char cCmd[10];
// unsigned char iSendData[MAX_PACKAGE_SIZE], iGetData[MAX_PACKAGE_SIZE];
memset(iSendData,0,MAX_PACKAGE_SIZE);
memset(iGetData,0,MAX_PACKAGE_SIZE);


还是局部数组!我拿到文件开头改为全局数组后,再次通过!但是PSUpImage()中memcpy(iSendData+3, pContent, nLength);这句又报“应用程序严重错误。。。”,这次都是全局数组了。。。

我不明白为什么厂家给的程序(EVC开发)用局部数组,几十KB都没问题,我自己新建的就必须改为全局数组?

高手帮帮忙吧,好几天了都。谢谢了!
...全文
85 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 accessysq 的回复:
vs2005的stack比较小,你定义这么大的局部数据当然不行了。你可以考虑下面的做法: 1.将工程属性里面stack的值改大 2.局部数组添加static,或者是全局变量。 3.局部数组使用new/delete 推荐存续从低到高排。
大谢accessysq,太感谢了!!! 我用new/delete定义原来的局部数组,之前的都没问题了。 但是memcpy这个总是引起“严重错误”,无奈,我跑到工程属性把stack改大了很多,然后程序一路到底,全部OK!测试了很多次,没再出现新问题! 越来越感到自己水平菜,究其原因,写的太少,调得不够,看书也不多,要加油了。。。 accessysq,谢谢你了,
  • 打赏
  • 举报
回复
另外对于你改成全局变量后memcpy为什么出错我说不上,对于你的代码是否有什么错误我并不了解。你考虑单步看看是否有异常数据。
  • 打赏
  • 举报
回复
vs2005的stack比较小,你定义这么大的局部数据当然不行了。你可以考虑下面的做法: 1.将工程属性里面stack的值改大 2.局部数组添加static,或者是全局变量。 3.局部数组使用new/delete 推荐存续从低到高排。

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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