C++Builder 程序员博客
5 Aug
我用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();
}
}
}
}
如果我把这段接收程序屏蔽掉,关闭窗口的时候就不提示以上错误,请问我这程序该如何实现比较好?