发在BCB里没有解决不知道为什么cs.cbInQue的值为40,而inbuff的值为5。传回来的数据少了很多。大家多多帮忙啊,谢谢~!
  String Temp;
  char SendData[20],inbuff[1024];
  DWORD nBytesRead,dwError;
  COMSTAT cs;
  unsigned long lrc,BS;
  DCB dcb;
  memset(SendData,0,sizeof(SendData));
  memset(inbuff,0,sizeof(inbuff));
  Temp="COM"+IntToStr(rdCom->ItemIndex+1);
  hComm=CreateFile(Temp.c_str(),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
  if(hComm==INVALID_HANDLE_VALUE)
  {
    MessageBox(0,"打开通信端口错误!","信息提示",MB_OK);
    return;
  }
  GetCommState(hComm,&dcb);
  dcb.BaudRate=CBR_9600;
  dcb.ByteSize=8;
  dcb.Parity=NOPARITY;
  dcb.StopBits=ONESTOPBIT;
  if(!SetCommState(hComm,&dcb))
  {
    MessageBox(0,"通信端口设置错误!","信息提示",MB_OK);
    CloseHandle(hComm);
    return;
  }
  SendData[0]=0x1b;
  SendData[1]=0x10;
  SendData[2]=0x10;
  SendData[3]=0x00;
  SendData[4]=0x05;
  SendData[5]=0xc5;
  SendData[6]=0x93;
  SendData[7]='\0';
  BS=7;
  WriteFile(hComm,SendData,BS,&lrc,NULL);
  Sleep(100);
  ClearCommError(hComm,&dwError,&cs);
  if(cs.cbInQue>sizeof(inbuff))
    PurgeComm(hComm,PURGE_RXCLEAR);
  Edit1->Text=IntToStr(cs.cbInQue);
  ReadFile(hComm,inbuff,cs.cbInQue,&nBytesRead,NULL);
  inbuff[cs.cbInQue]='\0';
  Edit2->Text=StrLen(inbuff);
  Memo1->Text=String(inbuff);
  if(hComm!=INVALID_HANDLE_VALUE)
    CloseHandle(hComm);

解决方案 »

  1.   

    不知道为什么cs.cbInQue的值为40,而inbuff的值为5。传回来的数据少了很多?
    哪位大哥帮帮忙
      

  2.   

    ReadFile(hComm,inbuff,cs.cbInQue,&nBytesRead,NULL);这里,最好把超时设置贴出来,很可能是读操作很快返回了。
      

  3.   

    n久没来了,大概将近2年了吧,还挺怀念的,大家好!
    言归正传,最近要上PC与FPGA通信,想用RS232,个人觉得龚建伟老师的串口调试助手v2.2相当不错,可以十六进制收发,那想必十进制发/二进制收应该也可以实现吧,问题是由于小妹还没搞到源程序呢,应该是有,原来应该是可以下,可现在不让下了,各位兄弟姐妹们,如果有的话,资源共享一下,小妹将感激不尽!咱邮箱:[email protected].
      

  4.   

    hwzcjxhlmm:
    自己的程序,api方式的已经给你发了