簡體   English   中英

64位XE2中的Integer()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM