delphi7 RealThinClient-5.15 rtcFastStrings.pas 单元改进

function TRtcHugeString.Get: AnsiString;
  var
    a,b,loc:integer;
    FPack2:PRtcStrArr;
  begin
  if FCount>1 then
    begin
    SetLength(Result, FSize);
    loc:=1;

    for a:=0 to FDataCnt-1 do
      begin
      FPack2:=FData[a];
      for b:=0 to RTC_STROBJ_PACK-1 do
        with FPack2^[b] do
          begin
          Move(str[1], Result[loc], siz);
          Inc(loc, siz);
          end;
      end;

    for b:=0 to FPackCnt-1 do
      with FPack^[b] do
        begin
        Move(str[1], Result[loc], siz);
        Inc(loc, siz);
        end;

    if loc<>FSize+1 then
      raise Exception.Create('Internal Huge AnsiString error.');
    end
  else if FCount>0 then
    begin
    with FPack^[0] do
      begin
// Result := str;  //fix out of momery 这里可以判断一下len 大于=255 在add是直接给str 如果长度过长会out of momery
       SetLength(Result, siz);
      Move(str[1], Result[1], siz);
      end;
    end
  else
    Result:='';
  end;

在 else if FCount>0 then 的处理是直接result := str 如果长度过长会out of momery

posted @ 2025-05-06 16:49  Tag  阅读(18)  评论(0)    收藏  举报