如何使用Delphi的Package功能來切割程式 (一) |
|
scottliou
版主 發表:16 回覆:56 積分:47 註冊:2002-03-14 發送簡訊給我 |
我想大家在使用Delphi開發應用程式時,一定會常遇到主程式過於龐大,使得執行的速度 & 編譯時間變得相當久且沒有效率,所以大家一定想把程式做切割成較小的程式,以前在Clipper的時還有Overlay可以使用,當然Delphi也可以使用DLL的方式來分割,但是使用DLL你覺得DLL和主程式之間的關係密合嗎? DLL可以使用主程式的變數嗎? DataModule可以用嗎(當然可以使用參數傳入)? 或許有許多人覺得使用EXE獨立程式切割,但是EXE和DLL又有何不同,而且每開啟一個EXE必須再佔用資料庫的資源&再重新LINK Database & 開啟 Table & 取得所須之變數,時間一分一秒的消耗,到最後還是選擇放棄! ,基於此種因素我一直在思考如何讓程式切割更加順暢,我在網路上找過許多文章也問過許多網友,但是不是文章過於深奧就是缺乏實例,但是所舉的數據皆証實切割程式可以為程式帶來的好處,這是肯定的,剛好我的文學造詣不算太好,而且太煩瑣的理論也懶得看,所以我以我自己工作的實例來說明,希望看到這篇文章的朋友可以為你們帶來一些助益。 http://www.jlat.com.tw/KTop/Question002.htm ~~~~~~~~~~~~~~~~
有夢想最美......
------
~~~~~~~~~~~~~~~~ 有夢想最美...... |
阿子
站務副站長 發表:120 回覆:230 積分:201 註冊:2002-03-18 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
shing.net
中階會員 發表:207 回覆:124 積分:66 註冊:2002-03-16 發送簡訊給我 |
|
lee
站長 發表:55 回覆:173 積分:45 註冊:2002-02-27 發送簡訊給我 |
|
shing.net
中階會員 發表:207 回覆:124 積分:66 註冊:2002-03-16 發送簡訊給我 |
引言:其是否在子程式中檢查param是否合法傳遞,那我還有一些疑問 1.其之間之共用參數傳遞是否亦用param來傳遞,那在管理param是否有一些技巧 2.若exe或參數存放在Program Files中,因Program Files中有空白如何避免 param誤判 謝謝引言: 請問站長若用EXE檔拆開,那要如何管制user非法執行單獨之EXE??我是在主程式呼叫.EXE檔加上參數,再由子程式中檢查param是否由主程式傳來的! 也可用檢查主程式執行檔是否正在執行的方式! ~~~Delphi K.Top網站總管~~~ |
lee
站長 發表:55 回覆:173 積分:45 註冊:2002-02-27 發送簡訊給我 |
引言: 其是否在子程式中檢查param是否合法傳遞,那我還有一些疑問 1.其之間之共用參數傳遞是否亦用param來傳遞,那在管理param是否有一些技巧 2.若exe或參數存放在Program Files中,因Program Files中有空白如何避免 param誤判先判斷參數數量 if Paramcount>=n then 再判斷參數內容 Log_id:=paramstr(1); Log_password:=paramstr(2); .... 應該與"Program Files中有空白"無關才對? ~~~Delphi K.Top網站總管~~~
------
~~~Delphi K.Top網站總管~~~ |
shing.net
中階會員 發表:207 回覆:124 積分:66 註冊:2002-03-16 發送簡訊給我 |
引言:exe傳遞參數是不是如 xx.exe param1 param2 param3 若是其是用空白來區分,但若param2包含c:\Program Files\... 其會不會誤判引言: 其是否在子程式中檢查param是否合法傳遞,那我還有一些疑問 1.其之間之共用參數傳遞是否亦用param來傳遞,那在管理param是否有一些技巧 2.若exe或參數存放在Program Files中,因Program Files中有空白如何避免 param誤判先判斷參數數量 if Paramcount>=n then 再判斷參數內容 Log_id:=paramstr(1); Log_password:=paramstr(2); .... 應該與"Program Files中有空白"無關才對? ~~~Delphi K.Top網站總管~~~ |
lee
站長 發表:55 回覆:173 積分:45 註冊:2002-02-27 發送簡訊給我 |
引言: exe傳遞參數是不是如 xx.exe param1 param2 param3 若是其是用空白來區分,但若param2包含c:\Program Files\... 其會不會誤判呼叫子程式用的Function為ShellExecute 其執行檔與參數是分開的參數傳入, ShellExecute(MainForm.Handle, nil,PChar(exefilename),PChar(params), PChar(ApplicationPath),SW_SHOW); 系統應不會認錯才對! ~~~Delphi K.Top網站總管~~~
------
~~~Delphi K.Top網站總管~~~ |
shing.net
中階會員 發表:207 回覆:124 積分:66 註冊:2002-03-16 發送簡訊給我 |
引言:謝謝你的回應 可能我誤會了,因為我以前有碰過類似問題,可是我忘記當時的寫法了 我想再請問若以Exe方式來切割會有何缺點??以及應該注意之事項 謝謝引言: exe傳遞參數是不是如 xx.exe param1 param2 param3 若是其是用空白來區分,但若param2包含c:\Program Files\... 其會不會誤判呼叫子程式用的Function為ShellExecute 其執行檔與參數是分開的參數傳入, ShellExecute(MainForm.Handle, nil,PChar(exefilename),PChar(params), PChar(ApplicationPath),SW_SHOW); 系統應不會認錯才對! ~~~Delphi K.Top網站總管~~~ |
lee
站長 發表:55 回覆:173 積分:45 註冊:2002-02-27 發送簡訊給我 |
|
19746311
一般會員 發表:6 回覆:1 積分:1 註冊:2002-03-13 發送簡訊給我 |
引言: scottliou&阿子: 我則採用笨方法,一個模組一個.EXE檔, .DLL檔只是用來將常用函數或經常變動的程式放入,以利更新, 當初測試Package時遇到一些無法解決的問題, 例如:共用session/login user name... 最後還是採用.EXE檔拆開, 很期望兩位大大能多多發表使用package的感想! ~~~Delphi K.Top討論區站長~~~使用*.bpl就是為了減少資源的浪費及變數的共用,當然可以共用Package的變數啊!何來無法共用變數之說?如果無法使用*.bpl的變數,那和使用*.dll有何不同? |
shing.net
中階會員 發表:207 回覆:124 積分:66 註冊:2002-03-16 發送簡訊給我 |
引言:1.若使用ado方式是否會減少 2.若共用之LIB獨立出來成函式庫引言: 可能我誤會了,因為我以前有碰過類似問題,可是我忘記當時的寫法了 我想再請問若以Exe方式來切割會有何缺點??以及應該注意之事項1.程式碼總數較大,因個別的.EXE都有BDE 2.無法共用LIB,需每一個EXE都含入LIB 3.對資料庫而言Session會增加 4.執行速度較慢,因為每一個EXE都要重新Login資料庫 5.所以能用Package就用Package ~~~Delphi K.Top網站總管~~~ |
wenjung
一般會員 發表:21 回覆:61 積分:21 註冊:2002-04-29 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
引言:我們現在就是用bpl的方式在開發AP,其可解決共用變數及共用CONNECTION的問題引言: scottliou&阿子: 我則採用笨方法,一個模組一個.EXE檔, .DLL檔只是用來將常用函數或經常變動的程式放入,以利更新, 當初測試Package時遇到一些無法解決的問題, 例如:共用session/login user name... 最後還是採用.EXE檔拆開, 很期望兩位大大能多多發表使用package的感想! ~~~Delphi K.Top討論區站長~~~使用*.bpl就是為了減少資源的浪費及變數的共用,當然可以共用Package的變數啊!何來無法共用變數之說?如果無法使用*.bpl的變數,那和使用*.dll有何不同?
------
@@~~飛翔在天際的精靈~~@@ |
阿子
站務副站長 發表:120 回覆:230 積分:201 註冊:2002-03-18 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
引言: andersonhsieh兄 不知你們是用什麼方法去解決共用變數及共用CONNECTION的問題 不知是否可以分享一下。謝謝 從思考取勝一切~q共用CONNECTION: 只要主要的DATA MOUDLE才放TDATABASE元件,其它的DATA MODULE不要放TDATABASE元件 共用變數: 將變數寫成共用的FORM或DATA MOUDLE的一個PROPERTY,並將此FORM或DATA MODULE寫作共用的BPL就可以了
------
@@~~飛翔在天際的精靈~~@@ |
阿子
站務副站長 發表:120 回覆:230 積分:201 註冊:2002-03-18 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
引言: 不知可否請andersonhsieh兄作個簡單的範例分享一下,這樣能可會更明白運作的方法。謝謝 從思考取勝一切~q我寫了一個demo程式你可參考看看 http://delphi.ktop.com.tw/loadfile.php?TOPICID=6149211&CC=137529 @@~~飛翔在天際的精靈~~@@ 發表人 - andersonhsieh 於 2002/07/20 06:05:45
------
@@~~飛翔在天際的精靈~~@@ |
Hero
一般會員 發表:3 回覆:10 積分:12 註冊:2002-07-11 發送簡訊給我 |
|
cyl
中階會員 發表:163 回覆:171 積分:66 註冊:2002-07-11 發送簡訊給我 |
引言:請問我在看這隻Demo程式時,是不是意思是說主要的Form放Tdatabase這個原件,然後去呼叫每一隻子程式呢??不知是不是這個意思? 請問在主程式裡呼叫BPL裡的Form後,要如何關閉?? 還有一個疑問,為什麼主畫面的Tdatabase都沒有做任何事?BPL的table是連接到這個database嗎?? 發表人 - cyl 於 2002/12/27 10:22:56引言: 不知可否請andersonhsieh兄作個簡單的範例分享一下,這樣能可會更明白運作的方法。謝謝 從思考取勝一切~q我寫了一個demo程式你可參考看看 http://delphi.ktop.com.tw/loadfile.php?TOPICID=6149211&CC=137529 @@~~飛翔在天際的精靈~~@@ 發表人 - andersonhsieh 於 2002/07/20 06:05:45 |
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
只有主要的form有TDATABASE元件而其它的BPL FROM沒有,是為了共用DATABASE SESSION而做的,這就可以解決如用EXE時會有多DATABASE SESSION的問題,用BPL的方式來開發系統時和開發一般AP是一樣的,因為每一支子程式在開發階段都是可以單獨執行的,等要RELEASE出去時再整合在一起即可,但在用BPL開發專案時也有一些要注意的地方,以下的大概說明一下
1.主程式一定要用RUNTIME PACKAGE的方式去編譯
2.共用的UNIT也一定要包成共同的PACKAGE,在DELPHI的IDE介面要INSTALL進去
3.主FORM的共用變數要寫成PROPERTY的方式來共同,比較不會有問題
4.除了程式主體以外,其它的BPL FROM不要的有TDATABASE元件,這樣才能做到共用DATABASE CONNECTION SESSION的目的
以上是我使用BPL的方式在開發系統的心得,如有說錯還請先進指正,謝謝 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@ |
cyl
中階會員 發表:163 回覆:171 積分:66 註冊:2002-07-11 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
yamapig
一般會員 發表:12 回覆:47 積分:21 註冊:2002-03-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |