需要建议在 Delphi 中使用Faststring.pas替代

t40tm48m  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(106)

我已经将代码从** Delphi 6 32位转换为Delphi 11 64位**,在源代码中,我们使用Fast String来使用FastReplace()FastPos()函数。
我试图使用** Delphi 11 64位**编译FastStrings.pas单元文件,但它引发了编译错误,因为它包含asm代码。因此,我将FastPos()函数替换为Pos(),以解决编译错误。
有什么确切的替代方法可以包括具有相同功能的FastPos()函数?

//The first thing to note here is that I am passing the SourceLength and FindLength
//As neither Source or Find will alter at any point during FastReplace there is
//no need to call the LENGTH subroutine each time !
function FastPos(const aSourceString, aFindString : string; const aSourceLen, aFindLen, StartPos : Integer) : Integer;
var
  JumpTable: TBMJumpTable;
begin
  //If this assert failed, it is because you passed 0 for StartPos, lowest value is 1 !!
  Assert(StartPos > 0);
  if aFindLen < 1 then begin
    Result := 0;
    exit;
  end;
  if aFindLen > aSourceLen then begin
    Result := 0;
    exit;
  end;

  MakeBMTable(PChar(aFindString), aFindLen, JumpTable);
  Result := Integer(BMPos(PChar(aSourceString) + (StartPos - 1), PChar(aFindString),aSourceLen - (StartPos-1), aFindLen, JumpTable));
  if Result > 0 then
    Result := Result - Integer(@aSourceString[1]) +1;
end;

字符串
我已经使用了StringReplace()函数而不是FastReplace(),它在 Delphi 64位中工作得很好。
请提供任何解决方案来实现FastPos()功能在 Delphi 11 64位。

相关问题