最近在学习串口编程,这里有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); }
设那么多的变量?嘿嘿各位也帮我看看第一段运行时为什么会报错?请各位给指点迷津。
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); }
{
BYTE bt;
safearray_inp.GetElement(&k, &bt);
strtemp.Format(_T("%02X"), bt);
m_Rstr+=strtemp;
}
学习学习!!!