本文共 833 字,大约阅读时间需要 2 分钟。
在编一个串口通信程序,因为刚上手,所以是按着龚建伟书的第一章改写的。
在处理接收数据的函数中 void CSerTestDlg::OnComm() { VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; CString strtemp; if(m_ctrlComm.GetCommEvent()==2) { variant_inp=m_ctrlComm.GetInput(); //第一步 safearray_inp=variant_inp; //第二步 len=safearray_inp.GetOneDimSize(); //第三步 for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k); for(k=0;k<len;k++) { char bt=*(char*)(rxdata+k); strtemp.Format("%c",bt); m_strEditRXData+=strtemp; UpdateData(FALSE); } } }我用debug查看,第一步的结果是对的,数据放入到我定义的缓冲区variant_inp中
第二步弹出错误框,但忽略后safearray_inp也接收到数据 第三步又弹出错误框,但忽略后得到的有效数据长度len是一个负数。 结果后面就一直错下去了。
后来我网上费了好大劲终于解决弹出错误框问题:是由于少调用了m_ctrComn.SetInputMode(1);
好,可是问题又出现,发现只能给串口发送数据,不能接受数据,晕死!!
又是在网上查找半天,无果!!!
但是看到一个人写的关于串口通信的问:双击消息OnComm,将弹出的对话框中将函数名改为OnComm。
于是联想到我的函数,原来函数名不是OnComm,于是赶紧改。
最后问题不在出现,结果正常!
转载地址:http://jqlxb.baihongyu.com/