疑惑 请各位给指点迷津(串口程序)

Watchmen_ 2012-06-06 05:11:07
最近在学习串口编程,这里有2段代码(实现的功能是接收数据)。

第一段代码是我照着书上写的,运行时,只要接收数据,系统就报错(好像是系统崩溃了);

第二段代码是自己写的,运行时OK.

我是个菜鸟,不明白为什么书上、网上基本上都是第一段这样的代码,为什么要
设那么多的变量?嘿嘿各位也帮我看看第一段运行时为什么会报错?

请各位给指点迷津。


m_Rstr是编辑框的CString型变量;
m_ctrlComm是MSComm控件的对象;

第一段代码:

void CMSComm_2Dlg::OnComm()
{
if(m_ctrlComm.GetCommEvent()==2)
{

VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strtemp;

variant_inp=m_ctrlComm.GetInput();

safearray_inp=variant_inp;

len=safearray_inp.GetOneDimSize();

for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);

for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%02X",bt);

m_Rstr+=strtemp;
}
UpdateData(FALSE);
}

}



第二段代码:

void CMSCommDlg::OnComm()
{

if(m_ctrlComm.GetCommEvent()==2)
{

VARIANT a;

a.vt = VT_VARIANT;

a.bstrVal=(_bstr_t)m_ctrlComm.GetInput();

CString str = (BSTR)a.pbstrVal;

m_Rstr+=str;

}

UpdateData(FALSE);

}
...全文
72 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-03-06
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
zgl7903 2012-06-07
  • 打赏
  • 举报
回复
随便说说

第一段可以接收HEX数据, 第二段只能接收ASC数据

第一段里有一个严重的漏洞 就是当接收到的数据大于2048是会导致越界访问 其实不用rxdata更好

for(k=0;k<len;k++)
{
BYTE bt;
safearray_inp.GetElement(&k, &bt);
strtemp.Format(_T("%02X"), bt);
m_Rstr+=strtemp;
}

Watchmen_ 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
随便说说

第一段可以接收HEX数据, 第二段只能接收ASC数据

第一段里有一个严重的漏洞 就是当接收到的数据大于2048是会导致越界访问 其实不用rxdata更好

for(k=0;k<len;k++)
{
BYTE bt;
safearray_inp.GetElement(&k, &bt);
strtemp.Format(_T("%02X")……
[/Quote]


谢谢 zgl7903
学习学习!!!
Watchmen_ 2012-06-07
  • 打赏
  • 举报
回复
自己顶一下!!

15,980

社区成员

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

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