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

包成Library,DLL,API 有何不同

答題得分者是:dllee
licheer
一般會員


發表:23
回覆:20
積分:8
註冊:2007-08-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-12 23:01:20 IP:125.233.xxx.xxx 訂閱
請問包成Library,DLL,API,Class 這幾種有什麼差異呢

包成 Library, 是 .lib 嗎?
就是 #include 他的標頭檔, 然後就能使用他裡面的 function嗎?
這和.dll的用法好像一樣

有人能解釋嗎? 或有相關網站, 我自己去看也行
謝謝
dllee
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-13 08:59:22 IP:220.134.xxx.xxx 訂閱
你的問題應該只有 .lib 與 .dll 的差別。
.lib 如您所說,用 #include Header.h 就可以用它的 API,當然,這個 .lib 也要加入專案才行。

.dll 有兩種使用方式
  1. 靜態鏈結:一樣有一個對應的 .lib,使用時,一樣 #include Header.h 及將 .lib 加入專案,就可以用它的 API,在程式執行時,會自動載入並執行此 .dll 檔
  2. 動態鏈結:不需要有 .lib 檔,但使用時要知道它的 API 介面,如變數型態/函式宣告等等,在程式中使用 LoadLibrary 載入 .dll 再用 GetProcAddress 取得 .dll 內的 API 函式指標,接著才能叫用它。
以上是用法的差別。

在實用上的差別是,如果使用 Library.lib,則在此 Library 內有函式內容修改時(函式介面不變),主程式就需要 rebuild 才能使用到新修改的函式。但如果使用 Dll.dll,在 Dll 內有函式內容修改時(函式介面不變),主程式不需要 rebuild,就可以直接使用到新修改的 Dll 函式,不論使用以上兩種的那一種方式鏈結 .dll 都一樣。這也是使用 .dll 的最大優點。

當然,這也是 .dll 的缺點之一,在上述中,我提到「函式內容修改時(函式介面不變)」,在函式介面改變時,主程式是需要 rebuild 或修改程式碼才能用的,而 .dll 的問題在於當同一 .dll 改版升級又已有多個已開發好的程式使用它時,每個開發程式在開發時可能使用不同版本的 .dll,這時,如何載入正確的 .dll 就是一個問題,這也是所謂的 DLL Hell。

還好的是,大部分的系統其實沒有像 Windows 那麼複雜,如果只是用的自己的 .dll,自己知道有以上使用上的優缺點即可順利解決版本衝突的問題。
------
http://www.ViewMove.com
系統時間:2024-05-02 12:18:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!