bcb如何將class製成dll |
尚未結案
|
csm825050
一般會員 發表:49 回覆:29 積分:15 註冊:2003-08-20 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
請參考:
■【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 發送簡訊給我 |
再繼續請教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 發送簡訊給我 |
如果您的 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 發送簡訊給我 |
感謝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 發送簡訊給我 |
不論是動態或靜態連結,.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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |