我是靠谱客的博主 快乐心情,最近开发中收集的这篇文章主要介绍MSComm控件过程中内存溢出和GetOneDimSize出错的问题MSComm控件过程中内存溢出和GetOneDimSize出错的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MSComm控件过程中内存溢出和GetOneDimSize出错的问题

现在做的一个项目需要实现上位机和单片机的串口通信,为了方便,使用了MSComm 件,但写程序时在处理接收数据遇到了问题,程序可以编译通过,但运行的过程中,程序只要接收到串口发来的数据,就会弹出内存溢出提示错误:in xx.exe(MFCO42D.DLL);0xC0000005,Acess Violation。处理接收数据部分程序如下:

void CDemoDlg::OnOnCommMscomm()   

{  

    // TODO: Add your control notification handler code here  

    VARIANT 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

                {  

                    safearray_inp.GetElement(&i,&rxdata[i]);  

                }  

                rxdata[i]='';  

            }  

            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控件过程中内存溢出和GetOneDimSize出错的问题MSComm控件过程中内存溢出和GetOneDimSize出错的问题的全部内容,希望文章能够帮你解决MSComm控件过程中内存溢出和GetOneDimSize出错的问题MSComm控件过程中内存溢出和GetOneDimSize出错的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部