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