读回来的返回值想在mReceive上显示,为什么这个按钮需要按两次才能显示出来?
void __fastcall TForm1::Button3Click(TObject *Sender)
{
unsigned int Buf[10];
char str[14],inbuff[1024],a,b,c,d,e;
int i,f,g,h,m,n,k;
unsigned long lrc;
DWORD nBytesRead,dwEvent,dwError;
COMSTAT cs;
if(hComm==0) return;//检查handle的值
str[0]=':';str[1]='W';str[2]='0';str[3]='0';
str[4]='0';str[5]='C';
f=0;g=0;h=0;m=0;n=0;k=0;
Buf[0]=StrToIntDef(mSend17->Text,0);
if(Buf[0]>65535)
{
MessageBox(0,"距离数据设置错误!!!","Set Error",MB_OK);
CloseHandle(hComm);
return;
}
f=Buf[0]/4096;g=Buf[0]%4096;h=g/256;m=g%256;
n=m/16;k=m%16;
if(f>9)
str[6]=f+0x37;
else str[6]=f+0x30;
if(h>9)
str[7]=h+0x37;
else str[7]=h+0x30;
if(n>9)
str[8]=n+0x37;
else str[8]=n+0x30;
if(k>9)
str[9]=k+0x37;
else str[9]=k+0x30;
a=0x00;
for(i=0;i<10;i++)
{
a+=str[i];
}
b=a%256;c=b/16;d=b%16;
if(c>9)
str[10]=c+0x37;
else str[10]=c+0x30;
if(d>9)
str[11]=d+0x37;
else str[11]=d+0x30;
str[12]=0x0D;str[13]=0x0A;
WriteFile(hComm,str,14,&lrc,NULL);
ClearCommError(hComm,&dwError,&cs);
//数据是否大于所准备的缓冲区
if(cs.cbInQue>sizeof(inbuff))
{
PurgeComm(hComm,PURGE_RXCLEAR);//消除通信端口数据
return;
}
ReadFile(hComm,inbuff,cs.cbInQue,&nBytesRead,NULL);//接收通信端口的数据
inbuff[cs.cbInQue]='\0';
mReceive->Text=inbuff;
C++builder做的一个窗口程序,发一下去一帧数据下位机会返回一组数据,但是奇怪的是为什么这个按钮需要按两次才能显示出来?是我那个ReadFile函数用的不对还是怎么回事,请指教!!