Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi10.2中32位到64位的访问冲突移植_Delphi_64 Bit - Fatal编程技术网

Delphi10.2中32位到64位的访问冲突移植

Delphi10.2中32位到64位的访问冲突移植,delphi,64-bit,Delphi,64 Bit,正在尝试将一些代码从32位delphi移植到64位。编译后,我在64位compi中的这一行获得了访问冲突(在32位compi上可以正常工作) PByte=^Byte; 函数TyDecoder.findCRLF(pStart,pEnd:PByte):PByte; 开始 而(不是((pStart^=13)和(pByte(Integer(pStart)+1^=10))或(pStart^=10))和(Integer(pStart)您已经被告知可以使用NativeInt(或NativeUInt)来获取指针

正在尝试将一些代码从32位delphi移植到64位。编译后,我在64位compi中的这一行获得了访问冲突(在32位compi上可以正常工作)

PByte=^Byte;
函数TyDecoder.findCRLF(pStart,pEnd:PByte):PByte;
开始

而(不是((pStart^=13)和(pByte(Integer(pStart)+1^=10))或(pStart^=10))和(Integer(pStart)您已经被告知可以使用
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;
函数TyDecoder.findCRLF(pStart,pEnd:PByte):PByte; 开始 而(非(((pStart[0]=13)及(pStart[1]=10)或(pStart[0]=10))及 (pStart
如果您愿意,您可以使用
pStart^
代替
pStart[0]
,也可以使用
(pStart+1)^
代替
pStart[1]


也请阅读。

我怀疑这与您传递给函数的内容有关,而不是函数本身。此外,没有XE10这样的东西:请澄清您使用的是什么版本的Delphi(例如西雅图10.0、柏林10.1、东京10.2)将
Integer
更改为
NativeInt
,它可以在32位和64位两种情况下工作。更好的方法是完全取消类型转换。
PByte
(以及早期版本中的
PAnsiChar
)本机支持,例如:
while(而不是((pStart^=13)和((pStart+1^=10))或(pStart^=10))和(pStart
您从上面的评论中收到了许多有用的提示。但总体而言,您应该花一些时间在迁移中心,您同时进行Unicode和64位迁移,因此这将是非常痛苦的。使用.ansisting并没有真正解决您的问题。您只是抑制了它们。现在是了解更改和迁移的时候了做对了。谢谢鲁迪的解释,这是一个非常有用的建议。这个例子中的代码是在2003年编写的,架构师浪费了时间。我认为即使在那时它也不必要的复杂。如果我最终重写了这段代码,你的答案也会非常方便。@Richard:在Delphi 7中,没有指针数学f或者除PChar之外的任何类型,因此您必须求助于PChar强制转换或强制转换指向整数的指针。
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;