试图将一些代码从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.
难住了.
您已经被告知可以使用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中有关指针数学的在线文档.
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |