由于以前有个项目使用了SPCOMM,而且那个兄弟修改了SPCOMM里面的代码。我新做一个就暂时用MSCOMM了。但是在使用中出现了这样一个问题:我给单片机发送的数据是正确的,它也给了我正确的返回值(我用串口调试助手可以看到发送和返回的数据),但是我在Delphi中接收的时候却总是差几个字节。我在接收的事件中的代码如下:
procedure TfrmAdvanceRecord.MSCommComm(Sender: TObject);
var
  i : integer;
  s : OLEVariant;
begin         //{
  if nCommClose then exit;
  if MSComm.CommEvent <> comEvReceive then exit;  s := VarArrayCreate([0,1023],varByte);
  s := MSComm.Input;  Memo1.Lines.Add('总长:=' +IntToStr(Length(s)));
  for i := 0 to Length(s) do
  begin
    Memo1.Lines.Add(IntToHex(s[i],2));
  end;
end;我用Memo1显示收到的数据,比串口调试助手中的总是少几个字节的数据。MSComm.RTthreshold := 1
请教大家!!!!!

解决方案 »

  1.   

    MSComm.InputMode一般而言应为comInputModeBinary;
    另外我觉得用中断去收1K的数据也太多了,不知道对你是否有帮助。
      

  2.   

    不知道你的“用中断去收1K的数据”是什么意思?我的MSComm.InputMode已经设置为comInputModeBinary了。我记得我用2000的时候还可以的,现在换成了XP就不行了。和操作系统有关吗?
    我查看了这个.ocx文件,应该是装VB6时装上的,和系统没什么关系。
      

  3.   

    to aiirii(ari-爱的眼睛) ,如果照你说的,应该是不一定缺哪个位置的字符。
    但是我的就是少最后几个(几个还不一定,暂时没发现缺的多于5个)。
      

  4.   

    问题我已经解决,和大家共享,并结贴了:)
    procedure TfrmAdvanceRecord.MSCommComm(Sender: TObject);
    var
      i : integer;
      s : OLEVariant;
    begin         //{
      if nCommClose then exit;
      if MSComm.CommEvent <> comEvReceive then exit;  s := VarArrayCreate([0,1023],varByte);
      s := MSComm.Input;  //Memo1.Lines.Add('总长:=' +IntToStr(Length(s)));
      for i := 0 to 1023 do
      begin
        try
          Memo1.Lines.Add(IntToHex(s[i],2));
        except
        end
      end;
    end;