在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"
答案 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
是一个指针,因此转换为另一个指针更自然 - 现在或将来不可能存在指针宽度错误。