我已经将代码从** 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位。
1条答案
按热度按时间sdnqo3pr1#
我使用了
Pos()
,它的工作正常。