線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1438
推到 Plurk!
推到 Facebook!

Byte(PChar) 的問題

答題得分者是:aftcast
shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-03-25 12:49:47 IP:72.136.xxx.xxx 訂閱
現在再改一個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 begin
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
編輯記錄
shininggod 重新編輯於 2012-03-24 23:03:03, 註解 無‧
shininggod 重新編輯於 2012-03-24 23:13:25, 註解 無‧
P.D.
版主


發表:571
回覆:3880
積分:3666
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-03-26 10:34:38 IP:118.169.xxx.xxx 未訂閱
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
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-03-27 00:55:36 IP:122.126.xxx.xxx 訂閱
 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.
版主


發表:571
回覆:3880
積分:3666
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-03-27 23:16:07 IP:59.120.xxx.xxx 未訂閱
還是得蕭大俠出手才行!
===================引 用 aftcast 文 章===================
PTROFFSET : PChar;

PTROFFSET : PByte;


Byte(PTROFFSET^) := Byte(PTROFFSET^) or BITSET //這裡會出現fataerror

PTROFFSET^ := PTROFFSET^ or BITSET


系統時間:2017-10-20 17:07:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!