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

請教關於Package 的問題

尚未結案
louis86
一般會員


發表:10
回覆:6
積分:3
註冊:2004-01-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-21 17:26:09 IP:61.220.xxx.xxx 未訂閱
請教各位高手,小弟的程式使用了一個Package, Package內有二個Unit分別為Unit_A 及Unit_B, 用 Unit_B 去uses 了Unit_A,然後在Unit_B內去使用Unit_A內的變數, compiler時正常沒有出現error, 但在程式執行到Unit_B使用到Unit_A的變數那一行時會出現Access Violation 的Error Message 請問為什麼會這樣呢?
yyu10
中階會員


發表:9
回覆:99
積分:96
註冊:2005-02-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-21 18:28:39 IP:220.244.xxx.xxx 未訂閱
只有当Unit_B在interface里去uses了Unit_A, 然后Unit_A在interface里去uses了Unit_B, compiler才会出错, 所以你至少有一个uses是在implementation里. Access Violation可能是由于variable没有initialize吧. Class variable, Pointer variable等要init后才能用的.
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-21 22:18:11 IP:218.1.xxx.xxx 未訂閱
什么变数,TObject吗?TObject使用前都要创建的。 把代码贴出来供大家诊断。     久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
louis86
一般會員


發表:10
回覆:6
積分:3
註冊:2004-01-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-22 18:54:45 IP:61.220.xxx.xxx 未訂閱
先感謝二位的回覆.. 我要讀取是在 Unint_A 內一個宣告為string的普通變數而已 而且這個變數在 Unit_A 內也已經 initialize 了
yyu10
中階會員


發表:9
回覆:99
積分:96
註冊:2005-02-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-22 19:09:38 IP:220.244.xxx.xxx 未訂閱
能把读变数的那行以及前一行和后一行发出来吗? 發表人 - yyu10 於 2005/02/22 19:18:02
louis86
一般會員


發表:10
回覆:6
積分:3
註冊:2004-01-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-22 19:15:31 IP:61.220.xxx.xxx 未訂閱
程式碼如下: unit Unit_A; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public Msg :String; { Public declarations } end; var Form1: TForm1; implementation uses Unit_B; {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); begin Msg:='test'; end; procedure TForm1.Button1Click(Sender: TObject); begin Form2:=TForm2.Create(Application); Form2.ShowModal; end; Initialization RegisterClass(TForm1); end. ********************************************************************** unit Unit_B; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation uses Unit_A; {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin showmessage(Form1.Msg); end; end.
yyu10
中階會員


發表:9
回覆:99
積分:96
註冊:2005-02-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-22 19:24:47 IP:220.244.xxx.xxx 未訂閱
RegisterClass(TForm1); // 并没有创建 Form1 showmessage(Form1.Msg); // Form1在这里仍然nil //试试 if not Assigned(Form1) then Application.CreateForm(TForm1, Form1); ShowMessage(Form1.Msg); 發表人 - yyu10 於 2005/02/22 19:37:55
chiag
一般會員


發表:14
回覆:38
積分:10
註冊:2002-10-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-02-22 23:13:52 IP:218.164.xxx.xxx 未訂閱
type .... Msg :String; <---請將變數換個位置宣吿 { Public declarations } end; var Form1: TForm1; Msg :String; <---請將變數換到這裡 implementation 試試看, 因為我是如此撰寫的 新手上路!!加油中...
louis86
一般會員


發表:10
回覆:6
積分:3
註冊:2004-01-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-02-23 09:45:10 IP:61.220.xxx.xxx 未訂閱
經過測試yyu10兄及chiag兄二位所提供的方法都可以正確的執行 感謝二位的指導.. 不過由於yyu10兄先來所以分數就給yyu10兄了,只能對chiag兄說抱歉了..
系統時間:2024-11-23 7:19:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!