64位XE2中的Integer()

时间:2011-10-08 05:12:43

标签: delphi 64-bit delphi-xe2

在XE2的64位平台上,这怎么会正确?

type
  PRGB24 = ^TRGB24;
  TRGB24 = packed record
    B: Byte;
    G: Byte;
    R: Byte;
  end;

var
  s1: pRGB24;
  ptrD: integer;

....

inc(Integer(s1), PtrD); <- gives error here "Left side cannot be assigned to"

2 个答案:

答案 0 :(得分:5)

整数类型为32位长,指针类型在64位平台上为64位长,因此出错。我现在无法测试,但是

inc(NativeInt(s1), PtrD);

应该解决问题。


BTW:Inc过程可以接受指针,所以通常不需要在这里将指针强制转换为整数。

可以获得相同的结果
inc(PByte(s1), PtrD);

为了避免s1施放甚至更好

inc(s1, PtrD);

但它改变了代码的含义 - 它的等价物是

inc(PByte(s1), PtrD * SizeOf(TRGB24 ));

答案 1 :(得分:5)

虽然NativeInt将完成工作,但我宁愿将其投放到PByte

inc(PByte(s1), PtrD);

由于s1是一个指针,因此转换为另一个指针更自然 - 现在或将来不可能存在指针宽度错误。