解决使用MSComm控件过程中内存溢出的问题
来源:互联网 发布:网络三维虚拟展馆 编辑:程序博客网 时间:2024/05/12 06:11
现在做的一个项目需要实现上位机和单片机的串口通信,为了方便,使用了MSComm控件,但写程序时在处理接收数据遇到了问题,程序可以编译通过,但运行的过程中,程序只要接收到串口发来的数据,就会弹出内存溢出提示错误:in xx.exe(MFCO42D.DLL);0xC0000005,Acess Violation。处理接收数据部分程序如下:
void CDemoDlg::OnOnCommMscomm() {// TODO: Add your control notification handler code hereVARIANT variant_inp;//COleVariant myVar;COleSafeArray safearray_inp;long i=0;long len;char rxdata[200];CString tmp;switch (m_mscomm.GetCommEvent()){case 1:break;case 2://表示接收缓冲区内有字符{variant_inp=m_mscomm.GetInput();safearray_inp=variant_inp;len=safearray_inp.GetOneDimSize(); //问题出在这for (i=0;i<len;i++){safearray_inp.GetElement(&i,&rxdata[i]);}rxdata[i]='\0';}break;default:break;}}经过调试,确定问题出在len=safearray_inp.GetOneDimSize()这里。在网上搜了一下,发现不少人在使用MSComm控件时遇到了跟我同样的问题,有些人回复说把使用的MFC动态链接库改为静态的,还有的说把variant_inp=m_mscomm.GetInput()改为variant_inp.Attch(m_mscomm.GetInput())。我照着这些方法都试了还是不行。后来在每周的例会上把这个问题跟一个同事说了一下,他帮我调试了程序,发现variant=m_mscomm.GetInput()这局执行完后,variant里依然是空的,并没有获得串口接收到的字符串,这才造成了内存的泄露。上面的程序基本参照了网上成熟的MSComm控件使用的例子,按说代码不会出错的.后来在CSDN的一篇帖子里搜到可能是mfco42d.dll这个文件的问题,遂到网上重新下载了个mfco42d.dll文件替换原文件。重新编译,程序能运行,发送和接收串口数据都正常。
- 解决使用MSComm控件过程中内存溢出的问题
- MFC中MSCOMM控件问题的解决
- Visual Studio中解决MSCOMM控件的问题
- Visual Studio中解决MSCOMM控件的问题
- Visual Studio中解决MSCOMM控件的问题
- 解决VS2010使用mscomm控件无法接收数据的问题
- 解决Window 7系统中Visual Studio 2010不能使用MSCOMM ActiveX控件的问题
- 解决mscomm控件无license的问题
- 在win7下使用MFC中MSComm控件的问题
- mscomm 控件的问题
- Delphi中MsComm控件的安装使用
- Vs2010中MSCOMM串口控件的使用
- 关于Myclipse和Jboss调试过程中内存溢出问题的解决
- MSComm控件的使用
- Myeclipse使用中内存溢出的问题
- Myeclipse使用中内存溢出的问题
- Myeclipse使用中内存溢出的问题
- 解决内存溢出的问题
- KVO(Key-Value observing)介绍
- 【奥运美术】香港商报报道2010奥林匹克美术大会总协调人何秀范
- 最优化方法(运筹学方法)
- 常见C#算法面试
- Asp.net夜话之一:asp.net介绍
- 解决使用MSComm控件过程中内存溢出的问题
- DHTMLX 简介
- 如何使swt窗口居中显示
- IBM软件架构处理天文领域海量数据
- ibatis 对象关系实现
- C语言中数据类型转换详解
- C# 异步调用与线程总结
- Emacs 快速指南(for eamcs 23.3)
- 计算正整数被标示为连续整数的和