用MSCOMM控件接收数据出现的问题

ms_wqs 2003-12-21 08:15:02
用MSCOMM接收数据时,
对mscomm事件的响应代码如下:
void CSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
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存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
}
UpdateData(FALSE); //更新编辑框内容
}
//m_strRXData,是最后想要显示的CString


执行到safearray_inp=variant_inp;时老出现异常,异常如下“User Breakpoint called from code at 0x77fa018c”,variant_inp中接收到数据是对的。我和参照例子的源码比了一下,发现在VC的workspace中的FILE区中多了一个External Dependencies,其中包含了一个basetsd.h文件,估计是因为包含它的问题,想把他删掉,可是编译链接工程时都会包含这个文件。


...全文
32 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ms_wqs 2003-12-22
  • 打赏
  • 举报
回复
是不是因为包含了那个basetsd.h文件,例子中是不包含的,这个文件是在编译链接时加上的。
rosestrom 2003-12-21
  • 打赏
  • 举报
回复
应该不是代码的问题,我的代码和你的一样,没有那种问题
variant_inp=m_com1.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存放
base+=strtemp;
}

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧