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

如何使用Delphi的Package功能來切割程式 (一)

 
scottliou
版主


發表:16
回覆:56
積分:47
註冊:2002-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-03-28 21:57:16 IP:61.70.xxx.xxx 未訂閱
我想大家在使用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-03-29 00:10:19 IP:61.221.xxx.xxx 未訂閱
scottliou 大大 找到有相同想法的人,真好小弟目前也正在使用Package在切割程式 目前小有心得,不過相對使用DLL有不方便的地方使用Package也有不方便的地方,不知scottliou 大大你是如何去解決的,一些有關的問題小弟可否在近斯內整出來在來和scottliou 大大一起討論請教。 阿子 從思考取勝一切~q
------
從思考取勝一切~q
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-03-29 07:10:09 IP:61.219.xxx.xxx 未訂閱
scottliou&阿子: 我則採用笨方法,一個模組一個.EXE檔, .DLL檔只是用來將常用函數或經常變動的程式放入,以利更新, 當初測試Package時遇到一些無法解決的問題, 例如:共用session/login user name... 最後還是採用.EXE檔拆開, 很期望兩位大大能多多發表使用package的感想! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-04-16 18:22:45 IP:211.74.xxx.xxx 未訂閱
引言: scottliou&阿子: 我則採用笨方法,一個模組一個.EXE檔, .DLL檔只是用來將常用函數或經常變動的程式放入,以利更新, 當初測試Package時遇到一些無法解決的問題, 例如:共用session/login user name... 最後還是採用.EXE檔拆開, 很期望兩位大大能多多發表使用package的感想! ~~~Delphi K.Top討論區站長~~~
請問站長若用EXE檔拆開,那要如何管制user非法執行單獨之EXE??
lee
站長


發表:55
回覆:173
積分:45
註冊:2002-02-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-04-16 21:06:53 IP:61.219.xxx.xxx 未訂閱
引言: 請問站長若用EXE檔拆開,那要如何管制user非法執行單獨之EXE??
我是在主程式呼叫.EXE檔加上參數,再由子程式中檢查param是否由主程式傳來的! 也可用檢查主程式執行檔是否正在執行的方式! ~~~Delphi K.Top網站總管~~~
------
~~~Delphi K.Top網站總管~~~
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-04-17 09:35:11 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 請問站長若用EXE檔拆開,那要如何管制user非法執行單獨之EXE??
我是在主程式呼叫.EXE檔加上參數,再由子程式中檢查param是否由主程式傳來的! 也可用檢查主程式執行檔是否正在執行的方式! ~~~Delphi K.Top網站總管~~~
其是否在子程式中檢查param是否合法傳遞,那我還有一些疑問 1.其之間之共用參數傳遞是否亦用param來傳遞,那在管理param是否有一些技巧 2.若exe或參數存放在Program Files中,因Program Files中有空白如何避免 param誤判 謝謝
lee
站長


發表:55
回覆:173
積分:45
註冊:2002-02-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-04-17 12:21:44 IP:61.219.xxx.xxx 未訂閱
引言: 其是否在子程式中檢查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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-04-17 14:20:34 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 其是否在子程式中檢查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網站總管~~~
exe傳遞參數是不是如 xx.exe param1 param2 param3 若是其是用空白來區分,但若param2包含c:\Program Files\... 其會不會誤判
lee
站長


發表:55
回覆:173
積分:45
註冊:2002-02-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-04-17 17:54:54 IP:61.219.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-04-18 10:43:18 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 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網站總管~~~
謝謝你的回應 可能我誤會了,因為我以前有碰過類似問題,可是我忘記當時的寫法了 我想再請問若以Exe方式來切割會有何缺點??以及應該注意之事項 謝謝
lee
站長


發表:55
回覆:173
積分:45
註冊:2002-02-27

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-04-18 12:39:02 IP:61.219.xxx.xxx 未訂閱
引言: 可能我誤會了,因為我以前有碰過類似問題,可是我忘記當時的寫法了 我想再請問若以Exe方式來切割會有何缺點??以及應該注意之事項
1.程式碼總數較大,因個別的.EXE都有BDE 2.無法共用LIB,需每一個EXE都含入LIB 3.對資料庫而言Session會增加 4.執行速度較慢,因為每一個EXE都要重新Login資料庫 5.所以能用Package就用Package ~~~Delphi K.Top網站總管~~~
------
~~~Delphi K.Top網站總管~~~
19746311
一般會員


發表:6
回覆:1
積分:1
註冊:2002-03-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-04-22 02:43:06 IP:211.23.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-04-22 09:15:33 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 可能我誤會了,因為我以前有碰過類似問題,可是我忘記當時的寫法了 我想再請問若以Exe方式來切割會有何缺點??以及應該注意之事項
1.程式碼總數較大,因個別的.EXE都有BDE 2.無法共用LIB,需每一個EXE都含入LIB 3.對資料庫而言Session會增加 4.執行速度較慢,因為每一個EXE都要重新Login資料庫 5.所以能用Package就用Package ~~~Delphi K.Top網站總管~~~
1.若使用ado方式是否會減少 2.若共用之LIB獨立出來成函式庫
wenjung
一般會員


發表:21
回覆:61
積分:21
註冊:2002-04-29

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-06-08 14:07:28 IP:210.71.xxx.xxx 未訂閱
delphi 用 package 非常好用若加上 dll 更可使系統模組化的程度相當高, 本人即是採用 .exe+.bpl+.dll 開發系統ap ,以 dcom 連接資料庫,為了減少 每隻程式 run 起來時都需 connect 一次故在將 dcom 以datamodule 以 bpl  包裝起來,不錯用喔 
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#15 引用回覆 回覆 發表時間:2002-06-24 14:32:20 IP:211.20.xxx.xxx 未訂閱
引言:
引言: scottliou&阿子: 我則採用笨方法,一個模組一個.EXE檔, .DLL檔只是用來將常用函數或經常變動的程式放入,以利更新, 當初測試Package時遇到一些無法解決的問題, 例如:共用session/login user name... 最後還是採用.EXE檔拆開, 很期望兩位大大能多多發表使用package的感想! ~~~Delphi K.Top討論區站長~~~
使用*.bpl就是為了減少資源的浪費及變數的共用,當然可以共用Package的變數啊!何來無法共用變數之說?如果無法使用*.bpl的變數,那和使用*.dll有何不同?
我們現在就是用bpl的方式在開發AP,其可解決共用變數及共用CONNECTION的問題
------
@@~~飛翔在天際的精靈~~@@
阿子
站務副站長


發表:120
回覆:230
積分:201
註冊:2002-03-18

發送簡訊給我
#16 引用回覆 回覆 發表時間:2002-06-24 17:40:30 IP:61.221.xxx.xxx 未訂閱
andersonhsieh兄 不知你們是用什麼方法去解決共用變數及共用CONNECTION的問題 不知是否可以分享一下。謝謝 從思考取勝一切~q
------
從思考取勝一切~q
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#17 引用回覆 回覆 發表時間:2002-06-24 23:12:39 IP:211.23.xxx.xxx 未訂閱
引言: andersonhsieh兄 不知你們是用什麼方法去解決共用變數及共用CONNECTION的問題 不知是否可以分享一下。謝謝 從思考取勝一切~q
共用CONNECTION: 只要主要的DATA MOUDLE才放TDATABASE元件,其它的DATA MODULE不要放TDATABASE元件 共用變數: 將變數寫成共用的FORM或DATA MOUDLE的一個PROPERTY,並將此FORM或DATA MODULE寫作共用的BPL就可以了
------
@@~~飛翔在天際的精靈~~@@
阿子
站務副站長


發表:120
回覆:230
積分:201
註冊:2002-03-18

發送簡訊給我
#18 引用回覆 回覆 發表時間:2002-06-25 00:27:27 IP:61.221.xxx.xxx 未訂閱
不知可否請andersonhsieh兄作個簡單的範例分享一下,這樣能可會更明白運作的方法。謝謝 從思考取勝一切~q
------
從思考取勝一切~q
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#19 引用回覆 回覆 發表時間:2002-07-19 09:55:34 IP:211.20.xxx.xxx 未訂閱
引言: 不知可否請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

發送簡訊給我
#20 引用回覆 回覆 發表時間:2002-09-03 17:02:05 IP:61.228.xxx.xxx 未訂閱
請問大家, Package 能跨行程使用嗎?也就是多支程式(獨立的執行檔),由某一支主程式載入 Package, 其他的程式接著執行後能夠使用先前執行的那支程式所載入的 Package 中的資源嗎?或是其他支程式也同樣載入此 Package, 但實際上記憶體中只有一份此Package 的實體呢?
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#21 引用回覆 回覆 發表時間:2002-12-27 10:14:09 IP:61.218.xxx.xxx 未訂閱
引言:
引言: 不知可否請andersonhsieh兄作個簡單的範例分享一下,這樣能可會更明白運作的方法。謝謝 從思考取勝一切~q
我寫了一個demo程式你可參考看看 http://delphi.ktop.com.tw/loadfile.php?TOPICID=6149211&CC=137529 @@~~飛翔在天際的精靈~~@@ 發表人 - andersonhsieh 於 2002/07/20 06:05:45
請問我在看這隻Demo程式時,是不是意思是說主要的Form放Tdatabase這個原件,然後去呼叫每一隻子程式呢??不知是不是這個意思? 請問在主程式裡呼叫BPL裡的Form後,要如何關閉?? 還有一個疑問,為什麼主畫面的Tdatabase都沒有做任何事?BPL的table是連接到這個database嗎?? 發表人 - cyl 於 2002/12/27 10:22:56
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#22 引用回覆 回覆 發表時間:2002-12-27 12:03:41 IP:211.23.xxx.xxx 未訂閱
只有主要的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

發送簡訊給我
#23 引用回覆 回覆 發表時間:2002-12-28 19:35:08 IP:61.30.xxx.xxx 未訂閱
引言: 4.除了程式主體以外,其它的BPL FROM不要的有TDATABASE元件,這樣才能做到共用DATABASE CONNECTION SESSION的目的
關於這一點我還是不明白,為什麼Exe檔可以共用DATABASE CONNECTION SESSION, 連到什麼程式麼都無須撰寫,當某一隻Exe檔已經連接上某個Db,另一隻exe檔再執行時,就會自己引用這個DATABASE CONNECTION SESSION嗎??這是什麼原因
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#24 引用回覆 回覆 發表時間:2002-12-30 11:14:06 IP:211.23.xxx.xxx 未訂閱
你可能搞錯了........除了要的主程式是exe外,其它的子程式都是bpl的型式 @@~~飛翔在天際的精靈~~@@ 發表人 - andersonhsieh 於 2002/12/30 11:17:10
------
@@~~飛翔在天際的精靈~~@@
yamapig
一般會員


發表:12
回覆:47
積分:21
註冊:2002-03-26

發送簡訊給我
#25 引用回覆 回覆 發表時間:2002-12-31 00:05:55 IP:218.164.xxx.xxx 未訂閱
andersonhsieh 大大,目前我也是在用*.bpl去切割程式,有一主程式*.exe,其餘皆為*.bpl, 但我共有500多支程式(*.pas,不含共用Function),我必須一個一個的編釋成*.bpl,有沒有什麼辦法可以一次編釋完成,或者說我有沒有辦法以程式去下編釋的指令. 謝謝! 靜中見真境 淡中識本然
------
靜中見真境 淡中識本然
系統時間:2024-06-16 15:23:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!