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

bcb如何將class製成dll

尚未結案
csm825050
一般會員


發表:49
回覆:29
積分:15
註冊:2003-08-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-07 15:13:34 IP:61.221.xxx.xxx 未訂閱
各位好: 我有一個bcb寫的class的程式,請問如何用bcb將這個class作成dll,若可以做成dll,那該如何用呢? 請不吝指教,謝謝
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-07 21:55:39 IP:211.76.xxx.xxx 未訂閱
請參考: ■【BCB】【發表】示範 DLL 中 export 一個 Class  http://delphi.ktop.com.tw/topic.php?topic_id=32223    是之前回答此問題的 ■【BCB】【問題】關於如何在DLL及LIB中使用 class 嗎? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=32028    視動科技 VMASK - ViewMove Automation Software Kernel 發表人 - dllee 於 2004/07/07 21:58:16
------
http://www.ViewMove.com
kk133
一般會員


發表:0
回覆:2
積分:0
註冊:2005-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-23 11:45:44 IP:210.201.xxx.xxx 未訂閱
再繼續請教dllee大大: 在該demo 中, project2有加入project1.lib, 為靜態鏈結 再該class有變更時,仍需重新編譯呼叫dll之主程式 請問若改為動態鏈結方式載入class, 可以省去這種麻煩, 但該如何做? 譬如動態載入function時, 會用 dd=LoadLibrary("dll_test.dll"); addfunc=(int (_stdcall*) (int, int))GetProcAddress(dd,"dlladd"); 在動態載入class時 請教應該如何做?
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-23 21:13:07 IP:211.76.xxx.xxx 未訂閱
如果您的 class 內有新增 property 或是 method,不論是用靜態鏈結或動態鏈結,引用 class 的專案都一樣要 rebuild。    您可以這樣想,在 .dll 有分享出 整體變數 及 函式, 而當此 .dll 更新時,如果它有提供新的 整體變數 或 函式時, 如果引用此 dll 的專案只有用到舊的 整體變數 及 函式,則不必 rebuild 就可以用, 如果引用此 dll 的專案有用到新的 整體變數 或 函式,則需要 rebuild 才能用。    如果 DLL 分享出來的 整體變數 及 函式介面不變,而函式內的運作改變, 則引用此 dll 的專案不需要 rebuild 就能配合新的 DLL。    同理,因為此問題是 dll 內有 class,可以想成有整體變數及函式的 DLL, 如果 class 的 .h 沒有改變,只有 .cpp 改變,則引用的專案不需 rebuild, 如果 .h 變了,不論是用靜態鏈結或動態鏈結,引用 class 的專案都一樣要 rebuild。    吃軟也吃硬 dllee.ktop.com.tw StatPlus 系統資源監測器 @ KTOP OpenPLC - IEC 61131-3 geOShell XP Like 中文版
------
http://www.ViewMove.com
kk133
一般會員


發表:0
回覆:2
積分:0
註冊:2005-05-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-23 22:53:56 IP:219.84.xxx.xxx 未訂閱
感謝dllee大大的回應 這裡真是個充滿溫暖的地方啊 ^^ 所以當一個CLASS為 class AA{ int count_1; int count_2; int add_demo(int a, int b); int mul_demo(int a, int b); int div_demo(int a, int b); } 改變為 class AA{ int count_1; int count_2; int count_3; //changed int add_demo(int a, int b); int sub_demo(int a, int b); //changed int mul_demo(int a, int b); int div_demo(int a, int b); } 之後 重新編譯該DLL, 無論是動態鏈結OR靜態鏈結 呼叫該DLL的主程式 只要不呼叫到sub_demo() or count3, 皆不會產生錯誤 對嗎? 我原先以為靜態鏈結在編譯時期就已經固定好OFFSET了... 而動態鏈結是在RUNTIME才去計算該OFFSET 我的觀念錯了 是嗎? 再次感謝回答:)
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-25 22:46:04 IP:211.76.xxx.xxx 未訂閱
不論是動態或靜態連結,.h 檔內的 class 宣告改變時,都是需要 rebuild 的。 以你的範例,如果 AA 新增了屬性及操作,則用到 AA 的都需要 rebuild 不論是動態或?態連結。 如果只是 AA 提供的操作函式 .cpp 有修改,例如找了 BUG 修改了函式的內容,但不需要修改 .h 檔內的 class 宣告時,則在動態連結用到 AA 的都不需要 rebuild,直接用新的 AA 之 DLL 即可。    吃軟也吃硬 dllee.ktop.com.tw StatPlus 系統資源監測器 @ KTOP OpenPLC - IEC 61131-3 geOShell XP Like 中文版
------
http://www.ViewMove.com
系統時間:2024-11-23 9:12:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!