[英]Integer() in 64bit 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"
整數類型為32位長,指針類型在64位平台上為64位長,因此出錯。 我現在無法測試,但是
inc(NativeInt(s1), PtrD);
應該解決問題。
順便說一句: Inc
程序可以接受指針,所以通常這里不需要將指針轉換為整數。 通過以下方式可以獲得相同的結果
inc(PByte(s1), PtrD);
完全避免s1
鑄造甚至更好
inc(s1, PtrD);
但它改變了代碼的含義 - 它的等價物是
inc(PByte(s1), PtrD * SizeOf(TRGB24 ));
雖然NativeInt
將完成工作,但我寧願將其投射到PByte
:
inc(PByte(s1), PtrD);
由於s1
是一個指針,因此轉換為另一個指針更自然 - 現在或將來不可能存在指針寬度錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.