串口控件!!!!急!!!

来源:百度知道 编辑:UC知道 时间:2024/05/28 22:24:40
void CCommDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2054]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_Comm1.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_Comm1.GetInput(); //读缓冲区
safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量
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_Show+=strtemp; //加入接收编辑框对应字符串
}
}
UpdateData(TRUE);
}
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); //字符型
这两句是什么意思。请大家帮忙。谢谢!急!!!
谢谢,您的方法很好,

你的代码中len没有赋值,在代码safearray_inp=variant_inp;后面加入下面这句
len=(USHORT)safearray_inp.GetOneDimSize(); //得到有效数据长度

解释以下你的疑问:
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
// 将safearray_inp中的元素一个个提取出来保存到到你自己定义的BYTE型数组rxdata中

for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
m_Show+=strtemp;
}
这段代码的意图是想将rxdata数组的元素一个个转换为字符,逐个添加到m_Show这个Cstring变量中。
但是其实此处多此一举rxdata本来就是BYTE型数组,为何还要用BYTE bt=*(char*)(rxdata+k);这句重复的转一次呢。而且一个个字符转换,效率太低了。建议用以下代码:
rxdata[len]='\0'; // rxdata加个字符串结束符
m_Show.AppendFormat(_T("%s"),rxdata);// 此句把整个rxdata数组内容作为字符串追加入m_Show,字符串长度为len。