全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1436
推到 Plurk!
推到 Facebook!

關於dll的問題

尚未結案
Blueberrug
一般會員


發表:14
回覆:50
積分:17
註冊:2005-05-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-22 17:20:58 IP:220.130.xxx.xxx 未訂閱
大家好: 請問一個我覺得很笨又很基礎的問題, 若在form1裡按button用dll方式呼叫form2, ======================================== form1的程式碼 ========================================
  HINSTANCE hlib = LoadLibrary("test.dll");
  PShowNewForm ShowNewForm;
  ShowNewForm = (PShowNewForm)GetProcAddress( hlib, "ShowForm" );
  ShowNewForm();
  FreeLibrary( hlib );
======================================== form2的程式碼 ========================================
  Form2 = new TForm2(NULL);
  Form2->Show();
======================================== 1.我若是在Form1裡使用FreeLibrary( hlib ); 就得在Form2裡使用Form2->ShowModal() 2.若是我堅持要使用Form2->Show();, 那就無法在Form1裡使用FreeLibrary( hlib ); 請問是不是因為我還有用到Form2的關係,無法馬上釋放dll呢? 那若是使用第二項的方式,那請問我要怎麼釋放dll呢?
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-24 01:28:26 IP:61.59.xxx.xxx 未訂閱
不太懂你的意思喔.. 不過應該是可以試試把HINSTANCE hlib 記在全域變數 等Form1 Close的時候再去FreeLib (當然先把Form2給關了)
Blueberrug
一般會員


發表:14
回覆:50
積分:17
註冊:2005-05-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-26 16:56:19 IP:219.70.xxx.xxx 未訂閱
引言: 不太懂你的意思喔.. 不過應該是可以試試把HINSTANCE hlib 記在全域變數 等Form1 Close的時候再去FreeLib (當然先把Form2給關了)
我的意思是利用動態來產生一各視窗,也就是Form2, 然而Form2的產生方式是利用DLL來呼叫, 所以變成我希望是form2關掉的時候, 就可以釋放DLL了。 我知道用showmodel我一定作得到, 但是若用show的話,我就不知道要怎麼用了! 不過還是謝謝您的幫忙。
limeca
中階會員


發表:2
回覆:74
積分:60
註冊:2005-05-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-26 19:35:56 IP:61.230.xxx.xxx 未訂閱
你好 把FreeLibrary( hlib );寫在Form2的程式碼裡是個方法~ 當From2要關閉時,就順便呼叫FreeLibrary( hlib ); 因為我想你的Form2應該有寫個什麼.cpp的檔案吧!!
Blueberrug
一般會員


發表:14
回覆:50
積分:17
註冊:2005-05-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-11 01:22:34 IP:219.70.xxx.xxx 未訂閱
引言: 你好 把FreeLibrary( hlib );寫在Form2的程式碼裡是個方法~ 當From2要關閉時,就順便呼叫FreeLibrary( hlib ); 因為我想你的Form2應該有寫個什麼.cpp的檔案吧!!
照你這樣說,就得把hlib當成全域變數來使用吧! 若我連續呼叫form2的話,怎麼辦呢?
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-11 21:56:13 IP:61.59.xxx.xxx 未訂閱
簡單的說...你會有一個變數iRef紀錄Form2被new了幾次 當Form2被new出來 iRef就 1 當Form2被delete iRef就-1 當iRef==0時 就是可以FreeLib..
Blueberrug
一般會員


發表:14
回覆:50
積分:17
註冊:2005-05-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-12 20:42:16 IP:219.70.xxx.xxx 未訂閱
引言: 簡單的說...你會有一個變數iRef紀錄Form2被new了幾次 當Form2被new出來 iRef就 1 當Form2被delete iRef就-1 當iRef==0時 就是可以FreeLib..
若是這樣的話,我是不是得用TIMER元件 來檢查iRef是不是等於0呢?
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-07-13 00:14:05 IP:61.59.xxx.xxx 未訂閱
當然不是.... 你就Form2關閉的時候
 
iRef--;
if(iRef==0)
  FreeLibrary( hlib ); 
Blueberrug
一般會員


發表:14
回覆:50
積分:17
註冊:2005-05-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-09-13 00:47:15 IP:219.70.xxx.xxx 未訂閱
最後我是在From2的Close那邊寫成 Action = caFree; 這樣我就不會有暴力存取的狀況出現。 不知道這樣對不對呢? 謝謝您們大家的幫忙啊!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-09-13 09:19:58 IP:210.68.xxx.xxx 未訂閱
要請別人幫忙卻選擇[缺席]做結案,應該會澆熄前輩們的熱情吧 不是分數的問題,是感覺的問題
Blueberrug
一般會員


發表:14
回覆:50
積分:17
註冊:2005-05-22

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-09-13 22:16:52 IP:219.70.xxx.xxx 未訂閱
引言: 要請別人幫忙卻選擇[缺席]做結案,應該會澆熄前輩們的熱情吧 不是分數的問題,是感覺的問題 < face="Verdana, Arial, Helvetica"> 你好: 不是我不給他們分數, 而是這題的答案是我自己找出來的, 所以我也不知道要給誰, 因此才選擇缺席的! 真是很抱歉啊!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-09-13 23:24:04 IP:218.168.xxx.xxx 未訂閱
原來您的問題已經自己解決了,看您的回應我以為問題還沒解決 誤會您了不好意思
系統時間:2024-04-26 18:32:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!