其实前面已经问过了,不过不能问题补充,所以再发一次
答到的,其实加起来就是120+70分了,大家帮帮忙啊
在编一个串口通信程序,因为刚上手,所以是按着龚建伟书的第一章改写的。
在处理接收数据的函数中
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是一个负数。
结果后面就一直错下去了。
请教一下大家是不是safearray_inp=variant_inp;出了什么问题,怎么改?
ps:进一步调试后我发现似乎是COleSafeArray这个结构的问题
不单只是safearray_inp=variant_inp的问题
第二步改为 safearray_inp.Attach( variant_inp)还是要报错。忽略后,
我即使手动把len=safearray_inp.GetOneDimSize()
改为len=70
在下面的程序中safearray_inp.GetElement(&k,rxdata+k)还是要报错。
也就是说凡是涉及safearray_inp的都会出错。
我想请教一下为什么,望不吝赐教
ps:我试用了下面这种方法,但还是死在Safearray上
void CSerTestDlg::OnComm()
{
COleVariant varInput;
COleSafeArray safearray_inp;
LONG lLen= 0;
LONG i= 0;
BYTE rxdata[2048];//设置BYTE数组 An 8-bIT integerthat is not signed.
//注意:设置接收数据
if(2== m_ctrlComm.GetCommEvent())//事件值为2表示接收缓冲区内有字符
{
varInput.Attach(m_ctrlComm.GetInput());//读缓冲区
safearray_inp= varInput;//VARIANT型变量转换为ColeSafeArray型变量
lLen= safearray_inp.GetOneDimSize();//得到有效数据长度
for(i= 0; i< lLen; i++)
{
safearray_inp.GetElement(&i, rxdata+i);//转换为 BYTE型数组
}
m_strEditRXData+=(char*)rxdata;
UpdateData(FALSE);//更新编辑框内容
}
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!