Byte(PChar) 的問題 |
答題得分者是:aftcast
|
shininggod
一般會員 發表:16 回覆:20 積分:17 註冊:2009-05-13 發送簡訊給我 |
現在再改一個D5的舊程式,要換成XE2
中間有一段是 [code delphi] procedure tMyName.BitSet(PTRSOURCE : Pointer; iX, iY : Integer; bValue : Boolean); var IOFFSET : Integer; PTROFFSET : PChar; BITSET : Byte; begin if (iX>=0) And (iY>=0) And (iX if PTRSOURCE<>nil then begin Modified := TRUE; IOFFSET := GetLineData(Header.XSize); IOFFSET := IOFFSET * iY; IOFFSET := IOFFSET iX shr 3; PTROFFSET := PTRSOURCE; PTROFFSET := PTROFFSET IOFFSET; BITSET := 1 shl (iX mod 8); if (bValue) then Byte(PTROFFSET^) := Byte(PTROFFSET^) or BITSET //這裡會出現fataerror else begin BITSET := not BITSET; Byte(PTROFFSET^) := Byte(PTROFFSET^) and BITSET; //這裡會出現fataerror end; end; end; end;[/code] 兩行 Byte(PTROFFSET^) 都會有 Left side cannot be assigned to 的錯誤訊息 這一段讓我囧了很久, 1. byte or byte 會出來啥Orz? *help是這樣說 or returns true if two values are different 但是直接true / false也不吃阿orz 2. 有何解決方法Orz Byte(PTROFFSET^) := true/false 要怎樣改寫.......Orz 編輯記錄
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
xe2 是否對記憶體位址的管理有做何種的改良, 我不是很清楚
一般來說, 這個錯誤是左側不可以直接指定的問題, 因為你使用 Byte(x) := Byte(x).., 自己對自己的指定 我不清楚你的程式碼在做何用, 但這樣的指定 是有可能造成記憶體位址的不允許 如果你以另一個變數 aByte: TByte; aByte:= Byte(x) ... 即可避開這個問題, 我在 xe2上實作是可以 compiler 過的, 但對於^ 的用法, 其實我也是一知半解, 只是提供你不會出問題的方式 ===================引 用 shininggod 文 章=================== 現在再改一個D5的舊程式,要換成XE2 中間有一段是 [code delphi] procedure tMyName.BitSet(PTRSOURCE : Pointer; iX, iY : Integer; bValue : Boolean); var IOFFSET : Integer; PTROFFSET : PChar; BITSET : Byte; begin if (iX>=0) And (iY>=0) And (iX IOFFSET := GetLineData(Header.XSize); IOFFSET := IOFFSET * iY; IOFFSET := IOFFSET iX shr 3; PTROFFSET := PTRSOURCE; PTROFFSET := PTROFFSET IOFFSET; BITSET := 1 shl (iX mod 8); if (bValue) then Byte(PTROFFSET^) := Byte(PTROFFSET^) or BITSET //這裡會出現fataerror else begin BITSET := not BITSET; Byte(PTROFFSET^) := Byte(PTROFFSET^) and BITSET;//這裡會出現fataerror end; end; end; end;[/code] 兩行 Byte(PTROFFSET^) 都會有 Left side cannot be assigned to 的錯誤訊息 這一段讓我囧了很久, 1. byte or byte 會出來啥Orz? *help是這樣說 or returns true if two values are different 但是直接true / false也不吃阿orz 2. 有何解決方法Orz Byte(PTROFFSET^) := true/false 要怎樣改寫.......Orz |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
PTROFFSET : PChar;
改 PTROFFSET : PByte; Byte(PTROFFSET^) := Byte(PTROFFSET^) or BITSET //這裡會出現fataerror 改 PTROFFSET^ := PTROFFSET^ or BITSET
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2012-03-26 11:31:00, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |