使用mscomm串口控件,VC6.0开发环境,接收图像数据(每幅大约40kB),内存增加厉害,每次大约60KB左右。
网上能找到的解决办法有
1.  把 Variant_inp = m_SetComm.GetInput(); 改为 Variant_inp.Attach(m_SetComm.GetInput());
2.  增加 VariantClear(&Variant_inp);
试了之后,都没有用。咋整?

解决方案 »

  1.   

    COleVariant myVariant;
    myVariant.Attach(m_SetComm.GetInput());
    ..............
      

  2.   


    1. 改为 Variant_inp.Attach(m_SetComm.GetInput());
    2. 增加 VariantClear(&Variant_inp);
    这两种方法我都试过了,没有用哎。
    求解答!
      

  3.   

    我可能错怪mscomm了,下面这段代码的作用是 把串口收到的数据保存成文件,把代码注释掉之后,内存就没有再泄露了。问题可能出在这一段上,请大家帮我看看:
    Variant_inp:串口收到的数据;RecFile:要保存成的目标文件
    LPSTR buffer;
    BYTE *pRecBuf = NULL;
    pRecBuf=(BYTE *)GlobalAlloc(GMEM_FIXED , Length); SafeArrayAccessData(Variant_inp.parray,(void **)&pRecBuf);
    buffer=(LPSTR)GlobalLock((HGLOBAL)pRecBuf);
    RecFile.WriteHuge(buffer, Length);
    GlobalUnlock((HGLOBAL)pRecBuf);
    SafeArrayUnaccessData (Variant_inp.parray); GlobalFree(pRecBuf);
    buffer = NULL;
      

  4.   

    SafeArrayAccessData(Variant_inp.parray,(void **)&pRecBuf);
    这句后pRecBuf可能已经不是原来申请的了
      

  5.   

    那肯定不能怪mscomm啊,难道你以为你发现BUG了,少往这方面想。我做自动化监控的时候,电脑不断电就不重启,也用的是mscomm,因为速度上要求并不高,如果有内存泄露,那不早死机了?出现内存泄漏,也肯定不是mscomm buffer的问题,我不知道怎么有些人会想到这个问题上来,那意思难道是mscomm的BUG?为要然与它的buffer有何干?SafeArrayAccessData只是取数据的地址,并不是拷贝数据,所以,你的代码中
    pRecBuf=(BYTE *)GlobalAlloc(GMEM_FIXED , Length);
    这一行是没用的,造成了内存泄漏!
      

  6.   

    去掉这一行:
    pRecBuf=(BYTE *)GlobalAlloc(GMEM_FIXED , Length);其它地方都不用动。
      

  7.   

    错了,还得去掉这一行:
    GlobalFree(pRecBuf);
      

  8.   

    试试这样    long uLength = 0;    
        if(SUCCEEDED(SafeArrayGetUBound(Variant_inp.parray, 1, &uLength))
          && uLength > 0) //获取长度
        {
          BYTE *pRecBuf = NULL;      
          if(SUCCEEDED(SafeArrayAccessData(Variant_inp.parray,(void HUGEP**)&pRecBuf)))
          {
            RecFile.Write(pRecBuf, uLength);
            SafeArrayUnaccessData (Variant_inp.parray);
          }
        }
      

  9.   

    朋友,帮个忙,我使用VC MSComm控件过程中也出现内存溢出的问题 .,能帮个忙把好的控件及库打包发给我,谢谢,[email protected]