我用MSCOMM控件做一个串口通讯程序,发送没问题,接收的时候,我是想把接收到的16进制数据转换成字符形式,并在文本框里显示,下位机发上来的数据是发送的字符的ASCII码值,最后一个是"!",上位机给下位机发送的查询命令不同,下位机每次返回来的数据字节数也不同,但是每次最后都会有一个"!",做为结束标志,我“!”作为结束判断标志,但我程序也未能实现,另外一个就是当我发送一个数据后,关闭窗体,却提示如下错误:“Project Project1.exe raised exception class EAccessViolation with message 'Accessviolation at address 0041A55B.Read of address 0000034'.Process stopped.Use Step or Run to continue.”错误,请问这是什么错误啦?我该怎么写程序去判断那个“!”符号啦?
我的串口接收程序如下:
void __fastcall TForm1::Uart_RecevieByte(TObject *Sender)
{

        OleVariant  RxBuff;
        unsigned int ByteNum;
        switch (MSComm1->CommEvent)
        {

                case comEvReceive:
                {

                        if(MSComm1->InBufferCount>0)
                        {
                                RxBuff=MSComm1->Input;//如果缓冲区中有多于一个字节的数据
                        }
                        ByteNum=RxBuff.ArrayHighBound(1);//将实际读的字节数取出

                        for(int i=0;i <=ByteNum;i++)
                        {
                                ReBuff[BuffPtr++] = RxBuff.GetElement(i);//将接收数据读入自己的缓冲区
                        }
                        //if(UpCase(ReBuff[BuffPtr-1])=='!')
                        if(BuffPtr == 17)
                        {
                                for(int i=0;i <BuffPtr;i++)
                                {
                                        Edit1->Text +=char(ReBuff[i]);
                                }
                                BuffPtr=0;
                                MSComm1->InBufferCount=0;
                                //success = true;
                                //Beep();
                        }

                }

        }
}
如果我把这段接收程序屏蔽掉,关闭窗口的时候就不提示以上错误,请问我这程序该如何实现比较好?