下面是串口编程时的一段程序,其中的有几个地方不是很明白?高手给指点下!谢谢!!

来源:百度知道 编辑:UC知道 时间:2024/09/28 14:33:59
void CSCommTestDlg::OnComm()
{
// TOD Add your control notification handler code here
VARIANT variant_inp;// 应该是一个属于多种变量类型的变量 具体是什么要看 在库类中的定义 就是用来很方便的进行数据变量之间的转换
COleSafeArray safearray_inp;//干什么用??其中COLeSafeArray 是源于varriant的一个类这是一个用以
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.怎么还可以这么用???BYTE是字节型的数组一共有2048 个数组是不是这样 不过它是用来做什么的!
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为 ColeSafeArray型变量weishenme要进行这样的转化 varriant不是已经是任意 类型的变量了吗?????
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=

safearray_inp=variant_inp;
不是类型转换,而是完整的复制了整个读取出来的结果
safearray_inp.GetElement(&k,rxdata+k);
就是把位置k的数据复制到rxdata[k]去,已经知道在safearray里面保存的就是一堆byte
BYTE bt=*(char*)(rxdata+k);
简直就是多此一举,rxdata[k]就是个BYTE值,如果要转换也是转成char
如果全传的是字符,m_strRXData+=(char)rxdata[k];就OK,没必要还去Format