尝试将一些代码从32位delphi移植到64位。编译后,我得到了访问冲突在64位comple的这一行(在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;
以前有很多问题将其从D7移植到东京10.2,但这些问题已通过将所有字符串声明更改为Ansistring而得到纠正。
我猜想这可能与指针类型现在为8而不是4有关。
被困住了。
答案 0 :(得分: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;
如果愿意,可以使用pStart[0]
代替pStart^
,并且可以使用pStart[1]
代替(pStart + 1)^
。