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

使用Package時,兩Form變數發生的問題

答題得分者是:ccchen
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-17 11:33:12 IP:61.219.xxx.xxx 未訂閱
請問? 我使用了一個Main 四個Package 在我使用第二個Package2時 使用了一個Form2,在Form2的public宣告了一個變數Check : boolean; 在Form2的Button1下打開Form3(create建立), 開法如下 try form3 := Tform3.create(application); form3.showmadul; //不知道有沒有拼錯 finally form3.free; end; 在Form3有一個按鈕button1,有一程式如下 form2.check := true; 就在這一行時發生錯誤 錯誤訊息 project test.exe raised exception class eaccessviolation with message 'access violation at address 047FAEEF in module 'package2.bpl'. write of address 00000564'. process stopped. use step or run to continue. 請問是哪裡出了問題 (form2有uses form3, form3 也有uses Form2) 是package2有問題嗎??? 我uses寫在implementation下面 再請問寫在 implementation下面的Uses和interface下的Uses有何不同 ???? 謝謝
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-17 23:08:57 IP:61.59.xxx.xxx 未訂閱
引言: 請問? 我使用了一個Main 四個Package 在我使用第二個Package2時 使用了一個Form2,在Form2的public宣告了一個變數Check : boolean; 在Form2的Button1下打開Form3(create建立), 開法如下 try form3 := Tform3.create(application); form3.showmadul; //不知道有沒有拼錯 finally form3.free; end; 在Form3有一個按鈕button1,有一程式如下 form2.check := true; 就在這一行時發生錯誤 錯誤訊息 project test.exe raised exception class eaccessviolation with message 'access violation at address 047FAEEF in module 'package2.bpl'. write of address 00000564'. process stopped. use step or run to continue. 請問是哪裡出了問題 (form2有uses form3, form3 也有uses Form2) 是package2有問題嗎??? 我uses寫在implementation下面 再請問寫在 implementation下面的Uses和interface下的Uses有何不同 ???? 謝謝 1.妳uses了form2...但妳form2裡有form2的instant嗎? 如果只有form2的interface...那你在form3用form2.XXX則會有問題 2.好像沒差...不過如果你只有在implement時有用到某個unit...最好 將uses寫在implement.....反之在interface宣告時用到的則將uses寫在 interface段落......這算是觀念問題^^
------
星期一,二...無窮迴圈@@
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-18 08:23:14 IP:61.219.xxx.xxx 未訂閱
由於內容不清楚, 錯誤的地方顯然未show出來,原不想回答,看到有些觀念實在太有問題,給你一些參考吧 1. implementation下面的Uses和interface下的Uses有何不同 Interface為宣告區, 所有在此部分uses的均會被"展開",例如你在unit1之interface uses unit2, 在unit3之interface uses unit1則unit1也uses了unit2. 兩個unit不可在interface 互相uses, 由於前所說的"展開",會造成無盡的loop, 至少其中一個uses 須移到implementation 2. 'access violation '就是記憶管理有問題, 看起來最大的可能是 form2.check時, form2並未建立 3. 下列幾點給你參考
a. 當你uses form2時, 你有的是TForm2的定義, 並無instance
b. TForm2=class(TForm)
   ...
   public
     ... 
   end; //在此end之前均為TForm2所有,若未create Instance無法使用      var
     ... //此處為global只要uses此unit就可使用
c. form2:=TForm2.create(application);
   用Tform2 類別來建立一個instance 叫做form2
form2.check := true;就在這一行時發生錯誤 先用debug執行到此行, 看form2是否nil 若是nil檢查程式, form2是否有create?, 是否已被free? 是否同時有form2之local變數與global變數
系統時間:2024-04-20 14:23:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!