有谁知道MSCOMM串行通信原理,什么时候触发commevent事件?我读缓冲区数据长度为什么不对
wazq 2004-12-17 10:15:36 int len;
LONG k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
bk=m_ctrlComm.GetInBufferCount();
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
b[k]=atoi(strtemp);
}
}
大家看看,当我发到好多个字符时, 我读缓冲区数据长度bk和len 都不是我实际收到的字节数,比如我收到11个,数据长度len显示为3,怎么才能得到实际的数据长度,这其中通信到底是什么原理呢?
另外,我想把接收到的数,分别存到数组b[k]中,为什么b[k]最大只能存进8个数,因为len的最大值只能是8,多于8时,又从1开始计数,怎么解决啊?