接收到的数据只有我通过扫描枪扫得真实数据的1/3左右,其他的没有接受到,怎么回事?

解决方案 »

  1.   

    procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
         ReStr,strsql:string;
         WReStr:WideString;
    begin
         Setlength(ReStr,BufferLength);
         Move(Buffer^,PChar(ReStr)^,BufferLength);
         savelog('test',trim(restr));
         edit1.Clear;
         edit1.Text:=trim(restr);
         jxstr(trim(restr));
     end;-------------------------
    在2000系统下没问题,我测试了几次好像是每次扫描后的数据没有读取完整,下次再扫描的时候上次的部分数据能收到
      

  2.   

    这里太慢了,大家用qq谈怎么样?我的qq:57523145
      

  3.   

    http://www.gjwtech.com/scomm/scdelphispcomm.htm看看这个,确定代码没问题的话,你就换个串口控件试试看。
      

  4.   

    http://www.gjwtech.com/scomm/scdelphispcomm.htm
    这里面的代码和我写得没什么差别好像
    这个叶面我都看了好几遍了
      

  5.   

    procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
         //ReStr,strsql:string;
         Restr:array [0..255]of byte;
         WReStr:WideString;
    begin
         //Setlength(ReStr,BufferLength);
         Move(Buffer^,ReStr,BufferLength);//---你作为PCHAR来处理时,如果你的数据中#0的话,会被截断的。你换成BYTE数据自己转换下试试看吧。我以前就碰到这样的事。
         savelog('test',trim(restr));
         edit1.Clear;
         edit1.Text:=trim(restr);
         jxstr(trim(restr));
     end;
      

  6.   

    仔细记录了一下日记,好像是接受了好多次,并且每次接受的长度都是63,怪了,莫非BufferLength与系统有关系?
      

  7.   

    经过一夜的捉摸,在spcomm的原文件里面修改了一个数值,现在测试可以了,修改的地方为:
    // Default size of the Input Buffer used by this code.
         INPUTBUFFERSIZE = 2048;
    我将2048改成64就可以了,为什么改成64,因为我测试了一下,发现当接收到长内容的时候,其实是分多次接受的,每次接受的长度为63,不知道这个该法对不对,今天继续测试以下,看看正确与否,欢迎大家继续讨论,今天揭帖。