MSComm控件串口事件形式OnComm函数接收数据老是出错?
用的是一般教科书上的源代码:voidCMSCommTestDlg::OnComm(){//TODO:Addyourcontrolnotificationhandlerco...
用的是一般教科书上的源代码:
void CMSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE型数组
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收数据事件
{
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存放
//strtemp.Format("%02x ",bt); //将字符的十六进制码存入strtemp
m_strEditRXData+=strtemp; //加入接收编辑框对应字符串变量中
}
}
UpdateData(FALSE); //更新编辑框内容,即在接收显示框中显示接收数据
}
目的是读取锁相放大器里面的数据,接收的数据老是到最后一位就出错 展开
void CMSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE型数组
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收数据事件
{
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存放
//strtemp.Format("%02x ",bt); //将字符的十六进制码存入strtemp
m_strEditRXData+=strtemp; //加入接收编辑框对应字符串变量中
}
}
UpdateData(FALSE); //更新编辑框内容,即在接收显示框中显示接收数据
}
目的是读取锁相放大器里面的数据,接收的数据老是到最后一位就出错 展开
2013-11-08
展开全部
类似
Visual C++_Turbo C串口通信编程实践
里的代码
Visual C++_Turbo C串口通信编程实践
里的代码
更多追问追答
追问
不同的书里面的代码其实都差不多,错误的原因是什么呢?我用的usb转串口
追答
usb转串口
情况复杂
说不清
可能的话,还是用 带串口的 电脑
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询