访问冲突在Delphi 10.2 Tokyo中移植32到64位

Ric*_*omo -1 delphi 64-bit

试图将一些代码从32位delphi移植到64.编译后我得到一个访问违规在64位补丁的这一行(在32上正常工作)

 PByte = ^Byte;

function TyDecoder.findCRLF(pStart,pEnd: PByte): PByte;
begin
 while (Not (((pStart^=13) and (pByte(Integer(pStart)+1)^=10)) or (pStart^=10))) and (Integer(pStart)<Integer(pEnd))   do Inc(pStart);
 Result:=pStart;
end;
Run Code Online (Sandbox Code Playgroud)

以前有许多问题从D7移植到10.2东京但是通过将所有字符串声明更改为Ansistring来纠正这些问题.

我猜这可能与指针类型有关,现在是8而不是4.

难住了.

Rud*_*uis 6

您已经被告知可以使用NativeInt(或NativeUInt)获取指针大小的整数.但是对于Delphi 10.2,你的表达仍然是不必要的.Delphi PByte(不是你的,所以不要自己定义)可以做指针数学,所以试试:

function TyDecoder.findCRLF(pStart, pEnd: PByte): PByte;
begin
  while (not (((pStart[0] = 13) and (pStart[1] = 10)) or (pStart[0] = 10))) and
        (pStart < pEnd) do
    Inc(pStart);    
  Result := pStart;
end;
Run Code Online (Sandbox Code Playgroud)

相反的pStart[0],你可以用pStart^和来代替pStart[1]你可以使用(pStart + 1)^,如果你喜欢的.

另请阅读Delphi中有关指针数学在线文档.