如果循环只运行了一次就break了,len当然只会是1.

解决方案 »

  1.   

    var
      buf: array[0..255] of char;
      len, i, ret: integer;
      RetLen: Byte;
      p: Pchar;
    begin
          len := 0;
          for i := 0 to 255 do
          begin
            ret := 0;
            if ret >= 0 then
            begin
               len := len+1;   //断点进入这里,观察到len没有递增,永远等于1!要疯了
            end
            else
              Break;
            ShowMessage(inttostr(len))
          end;改成上述代码,每次循环返回均+1了。说明
      ret := LsdMBus_Read(@Buf[i], 1, @RetLen);
    ret返回是的值<0 ,认真检查一下代码。
      

  2.   

    len后面没有使用到,编译优化掉了
      

  3.   


    改成上述代码,每次循环返回均+1了。说明
      ret := LsdMBus_Read(@Buf[i], 1, @RetLen);
    ret返回是的值<0 ,认真检查一下代码。
      

  4.   

    你的变量定义换下位置
    var
      len, i, ret: integer;
      RetLen: Byte;
      buf: array[0..255] of char;
      

  5.   

    ret返回是1,多次执行到断点就是没有递增。XP平台,重起后现象一样。上述代码移植到服务器端调试没问题。
      

  6.   

    觉得是你的 ret := LsdMBus_Read(@Buf[i], 1, @RetLen);BUF这个参数溢出导致的,  
     len := len+1;   //断点进入这里,观察到len没有递增,永远等于1!要疯了
    从上面看,如果溢出四个字节且BUF的溢出后面的数据是全0,你的len刚好是0,执行一次LsdMBus_Read复位0,所以你的len永远是1,
    刚好你的BUF是在栈顶,所以我要你调整变量位置看是不是这个原因,