有关MSComm控件,接收数据的问题? 本帖最后由 bearRON 于 2010-07-26 09:40:20 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的len是怎么得到的?循环中的那个觉得会不会是字符串访问达不到的数据才产生的Acess Violation~好比20个字符,你在程序中要获取第21个字符~ len 是由 len=safearray_inp.GetOneDimSize(); 语句得到的。你说的问题确实可能会发生。不过在调试的过程中,我又发现,本来固定好接受40个字节的数据,却接受到了41个,而且它接受的是分段接受,先接33个,后接7个。 好像可以设置等缓冲区字符大于40个字节再触发OnComm事件 m_ctrlComm.GetInput(); 前加sleep(100)试下 最好还是设置下触发OnComm事件的缓冲区字节数SetRThreshold(xx) 在串口初始化里,已经设置了 m_ctrlComm.SetRThreshold(1); 在做单步调试的时候,发现rxdata[2048]里有121个“烫”,说是定义的缓冲区未初始化? 如何初始化哦? 现在你的问题是什么?使用MSComm控件时,要注意控件属性的设置,尤其是OnComm事件的响应,通过SetRThreshold设置触发OnComm事件的具体条件,当接收缓冲区中达到RThreshold属性设置的字符门限,就触发OnComm事件(这个触发过程是操作系统帮助我们完成的),同时CommEvent属性值变为2,此事件将一直阻塞,直到通过GetInput读取InputLen属性设置的字符长度后,OnComm事件返回,若返回后缓冲区中的数据还满足条件,就会继续触发OnComm事件,直到条件不满足为止。这就是通信的机制。你的问题可能主要是对交换数据的处理上。MSComm控件使用GetInput和SetOutput这两个函数来实现接收和发送数据,并且GetInput的返回类型和SetOutput的参数都是VARIANT数据类型,所以需要对数据做一些变换。 用串口助手断点调试的时候,看到rxdata里面有121个烫! InputLen这个属性一般初始化为 :m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0m_ctrlComm.SetRThreshold(1); 若接受一个字符就发生一次OnComm事件,那它读取多少个字符呢?0个字符还是读取所有接受到的字符。 m_ctrlComm.GetInput()每次只接受8个字符的数据 ATL源码可以修改吗? 收到微软Offer了,接着散分涨RP…… 画圆 请教 对话框弹出后不能操作 大量的数据保存到SQL Server库中,表结构该怎样设计? [API]提问 我怎么在SDI文件中添加控件 有关向在VC++6.0下所建立的数据库管理系统中添加新字段的问题,希望大家能帮助解决 放暑假了,想出去学vc,又不知能去哪,各位大侠给参谋一下 高分求解!如何在Windows下实现按文本方式打印?我看过了记事本打出来的*.prn文件,发现是图形方式打印的!导致我很难解析这个文件! PrintWindow无法截取DirectX窗口的屏幕 编译错误error C2664
觉得会不会是字符串访问达不到的数据才产生的Acess Violation~好比20个字符,你在程序中要获取第21个字符~
你说的问题确实可能会发生。不过在调试的过程中,我又发现,本来固定好接受40个字节的数据,却接受到了41个,而且它接受的是分段接受,先接33个,后接7个。
使用MSComm控件时,要注意控件属性的设置,尤其是OnComm事件的响应,通过SetRThreshold设置触发OnComm事件的具体条件,当接收缓冲区中达到RThreshold属性设置的字符门限,就触发OnComm事件(这个触发过程是操作系统帮助我们完成的),同时CommEvent属性值变为2,此事件将一直阻塞,直到通过GetInput读取InputLen属性设置的字符长度后,OnComm事件返回,若返回后缓冲区中的数据还满足条件,就会继续触发OnComm事件,直到条件不满足为止。这就是通信的机制。
你的问题可能主要是对交换数据的处理上。
MSComm控件使用GetInput和SetOutput这两个函数来实现接收和发送数据,并且GetInput的返回类型和SetOutput的参数都是VARIANT数据类型,所以需要对数据做一些变换。
m_ctrlComm.SetRThreshold(1); 若接受一个字符就发生一次OnComm事件,那它读取多少个字符呢?0个字符还是读取所有接受到的字符。