本帖最后由 bearRON 于 2010-07-26 09:40:20 编辑

解决方案 »

  1.   

    你的len是怎么得到的?循环中的那个
    觉得会不会是字符串访问达不到的数据才产生的Acess Violation~好比20个字符,你在程序中要获取第21个字符~
      

  2.   

    len 是由 len=safearray_inp.GetOneDimSize(); 语句得到的。
    你说的问题确实可能会发生。不过在调试的过程中,我又发现,本来固定好接受40个字节的数据,却接受到了41个,而且它接受的是分段接受,先接33个,后接7个。
      

  3.   

    好像可以设置等缓冲区字符大于40个字节再触发OnComm事件
      

  4.   

    m_ctrlComm.GetInput(); 前加sleep(100)试下
      

  5.   

    最好还是设置下触发OnComm事件的缓冲区字节数SetRThreshold(xx)
      

  6.   

    在串口初始化里,已经设置了 m_ctrlComm.SetRThreshold(1); 
      

  7.   

    在做单步调试的时候,发现rxdata[2048]里有121个“烫”,说是定义的缓冲区未初始化? 如何初始化哦?
      
      

  8.   

    现在你的问题是什么?
    使用MSComm控件时,要注意控件属性的设置,尤其是OnComm事件的响应,通过SetRThreshold设置触发OnComm事件的具体条件,当接收缓冲区中达到RThreshold属性设置的字符门限,就触发OnComm事件(这个触发过程是操作系统帮助我们完成的),同时CommEvent属性值变为2,此事件将一直阻塞,直到通过GetInput读取InputLen属性设置的字符长度后,OnComm事件返回,若返回后缓冲区中的数据还满足条件,就会继续触发OnComm事件,直到条件不满足为止。这就是通信的机制。
    你的问题可能主要是对交换数据的处理上。
    MSComm控件使用GetInput和SetOutput这两个函数来实现接收和发送数据,并且GetInput的返回类型和SetOutput的参数都是VARIANT数据类型,所以需要对数据做一些变换。
      

  9.   

    用串口助手断点调试的时候,看到rxdata里面有121个烫!
      

  10.   

    InputLen这个属性一般初始化为 :m_ctrlComm.SetInputLen(0);  //设置当前接收区数据长度为0
    m_ctrlComm.SetRThreshold(1); 若接受一个字符就发生一次OnComm事件,那它读取多少个字符呢?0个字符还是读取所有接受到的字符。
      

  11.   

    m_ctrlComm.GetInput()每次只接受8个字符的数据