用控件(CMSComm)串口调试问题的解决

在编一个串口通信程序,因为刚上手,所以是按着龚建伟书的第一章改写的。 
在处理接收数据的函数中 
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,于是赶紧改。

 

最后问题不在出现,结果正常!

 

你可能感兴趣的:(用控件(CMSComm)串口调试问题的解决)