function LogInDeviceVar(DeviceVarName: PChar; DeviceVar: PChar) : Integer;
  var
    Str : String;
    I : Integer;
    p : PChar;
  begin
    Str := '';
    For I := 0 to 199999 do
    begin
      Str := Str + '1';
    end;
    Move(Str[1], DeviceVar^, Length(Str) + 1);
    result := 0;
  end;为什么Str长度比较短的时候可以,长度大了就不行了呢?

解决方案 »

  1.   

    I : Integer;
    将这个修改成
    I : Int64;
    试试
      

  2.   

    I : Integer;
    将这个修改成
    I : Int64;
    试试
      

  3.   

    integer的大小是(-32768~32768);所以你明白的。把integer如楼上所说,改成int64就ok了.话说你接那么多个'1'做啥子呢?
      

  4.   

    integer的大小是(-32768~32768);不要误导.! Integer -2147483648..2147483647 signed 32-bit
    远比199999大得多多多...
    什么溢出??
    199999 个1,才多点大呀?有什么极限可言?楼主,你要一个Str加'1'重复 199999+1次,这个计算时间是很大的,如果你所谓的不行是很慢的话,就是因为这个,如果是出错的话,那就是DeviceVar的长度不够.
    可以考虑把
      Str := '';
       For I := 0 to 199999 do
       begin
       Str := Str + '1';
       end;
     改成
    SetLength(Str , 199999+1);
    FillChar(Pointer(S)^ , 199999+1 , '1');
    这样既完成了你的循环相加,那速度是非常快的了
      

  5.   

    更正一下
    SetLength(Str , 199999+1);
    FillChar(Pointer(Str)^ , 199999+1 , '1');