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长度比较短的时候可以,长度大了就不行了呢?
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长度比较短的时候可以,长度大了就不行了呢?
将这个修改成
I : Int64;
试试
将这个修改成
I : Int64;
试试
远比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');
这样既完成了你的循环相加,那速度是非常快的了
SetLength(Str , 199999+1);
FillChar(Pointer(Str)^ , 199999+1 , '1');