我做的一个程序是读机器发送到串口里的指令,并给与回复.我断点调试的时候可以通过,但是一执行就报错,请高手帮我看看代码,看看哪个地方有问题.有问题的函数我都会给出的
代码如下:
1.OnOnCommMscomm():MSCOM控件的函数
void CComcontrolDlg::OnOnCommMscomm() 
{
VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[10240],bbc; //设置BYTE数组 An 8-bit integerthat is not signed.
    CString strtemp;
CByteArray BA_data;
    if(m_Comm.GetCommEvent()==2 && flag_read==false ) //事件值为2表示接收缓冲区内有字符
    {   
flag_read=true;
sendcmd("FF 81 81 FF");
RSCTL="";
FrameType="";
        variant_inp=m_Comm.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("%02x ",bt); //将字符送入临时变量strtemp存放
            m_EDIT1+=strtemp; //加入接收编辑框对应字符串
onecmd+=strtemp; if (strtemp=="ff ")
{
nff++;
if (nff==1)
{
onecmd="ff ";
}
}
if (nff==3)
{
break;
}
        }
if (nff==3)
{
int cmdlen=String2Hex(onecmd,BA_data);//这个函数不会有问题的
bbc=BBCTEST(2,cmdlen-3,BA_data);//这个函数不会有问题的
if (bbc!=BA_data[cmdlen-2])
{
onecmd="";
nff=0;
return;
}
RSCTL.Format("%x",BA_data[2]);
FrameType.Format("%02x",BA_data[3]);
onecmd="";
nff=0;
ANS(RSCTL);//这个不会有问题的
GetData(BA_data);  //可能有问题  
} }
UpdateData(FALSE);
 flag_read=false;
}
void CComcontrolDlg::GetData(CByteArray &rxdata)
{
CString strtemp="";
if (FrameType=="41")
{
m_EDIT3="";
m_EDIT4="";
m_EDIT5="";
m_EDIT6="";
m_EDIT7="";
for (int i=4;i<8;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT3+=strtemp;
}
ErrorCode.Format("%x",rxdata[8]);
if (ErrorCode=="0")

for (i=11;i<19;i++)
{
strtemp.Format("%c",rxdata[i]);
m_EDIT4+=strtemp;
}
for (i=19;i<22;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT5+=strtemp;
}
for (i=22;i<32;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT6+=strtemp;
}
for (i=32;i<36;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT7+=strtemp;
}
CTime t = (CTime)strtol(m_EDIT7,0,16);
m_EDIT7.Format("%04d-%02d-%02d %02d:%02d:%02d",t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());
}
return;
}
if (FrameType=="42")
{
m_EDIT8="";
m_EDIT9="";
m_EDIT10="";
m_EDIT11="";
m_EDIT12="";
m_EDIT13="";
m_EDIT14="";
m_EDIT15="";
for (int i=4;i<8;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT8+=strtemp;
}
ErrorCode.Format("%x",rxdata[8]);
if (ErrorCode=="0")

for (i=9;i<13;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT9+=strtemp;
}
long num=strtol(m_EDIT9,0,16);
float f_num=(float)num;
f_num=f_num/100;
m_EDIT9.Format("%.2f",f_num);
for (i=13;i<14;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT10+=strtemp;
}
for (i=14;i<16;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT11+=strtemp;
}
for (i=16;i<24;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT12+=strtemp;
}
for (i=24;i<28;i++)
{
strtemp.Format("%02x",rxdata[i]);
m_EDIT13+=strtemp;
}
/*for (i=37;i<47;i++)
{
strtemp.Format("%x",rxdata[i]);
m_EDIT14+=strtemp;
}
for (i=29;i<30;i++)
{
strtemp.Format("%x",rxdata[i]);
m_EDIT15+=strtemp;
}*/
}
return;
}
}
以上就是我给的代码,请高手费点眼睛,有劳了