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

請問如何靜態call dll class

答題得分者是:taishyang
cat200188
中階會員


發表:37
回覆:78
積分:68
註冊:2005-01-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-12 16:44:02 IP:220.130.xxx.xxx 訂閱
我把.h和lib,dll 放在同目錄下,也設好lib path ,也將lib 加到專案中,但當我想new 一個class 實體時,就會產生以下錯誤
Linker Error] Unresolved external 'BlobAnalysis::~BlobAnalysis()' referenced from D:\C \ADC-CHECK\UNIT1.OBJ
[Linker Error] Unresolved external 'BlobAnalysis::BlobAnalysis()' referenced from D:\C \ADC-CHECK\UNIT1.OBJ
請問這是什麼原因呢?感謝感謝
------
.......
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-13 10:29:40 IP:122.124.xxx.xxx 訂閱
有可能你的lib不能直接給BCB用,是屬於下面第一種情況的lib
http://delphi.ktop.com.tw/board.php?cid=168&fid=914&tid=55355 當中提到

(1)Lib 有兩種,第一種是 Win32 Static Library,這種檔案的格式在 VC 與
BCB 是不相同的,而且用 coff2omf 這個工具也無法正確互轉格式,目前也
還沒有看過能夠正確轉換的工具 (因為無法分別清楚得知 VC/BCB 的 Win32
Static Library 內部的詳細資料結構);你所說的那個檔案 (comsupp.lib)
,就是屬於這一種
(2)另外一種通常是專案型態為 Win32 Dynamic-Link Library 的副屬產出物,
例如: 假設你有一個 DLL 的專案名稱叫做 ABC 的話,在編譯、連結完成之
後,除了可以產生 ABC.dll 之外,也會產生 ABC.lib。當 ABC.dll 要給別
人使用的時候,就要把 ABC.dll/ABC.lib/ABC.h 至少這三個檔案提供給對方
,這樣子對方就可以選擇靜態連結 (會同時用到 ABC.dll/ABC.lib/ABC.h 這
三個檔案) 或動態連結 (只會用到 ABC.dll/ABC.h 這兩個檔案) 來呼叫你的
ABC.dll 內部的 function

所以可以參考下面連結的方式,將lib包成dll讓BCB呼叫

http://delphi.ktop.com.tw/board.php?cid=168&fid=923&tid=33420
(VC-BCB 整合系列一) 如何由 BCB 使用 VC 所產生的 LIB 及 DLL




編輯記錄
taishyang 重新編輯於 2007-11-13 10:32:26, 註解 無‧
taishyang 重新編輯於 2007-11-13 10:32:49, 註解 無‧
licheer
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-06-15 16:25:57 IP:220.130.xxx.xxx 訂閱
請教另一個問題
上面所用的dll,lib...應該算是動態連結,是嗎?
而BCB能像VC一樣使用靜態連結嗎
就是直接把程式碼產生的lib檔加進來用(不會產生dll檔)
VC在new Project時,
分別有Win32 Dynamic-Link Library和Win32 Static Library
對應到BCB,分別是DLL Wizard和Library嗎?
謝謝
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-06-16 01:29:24 IP:59.115.xxx.xxx 訂閱
你好,

我把taishyang 說的再補充一下:

dll 叫 動態連結資料庫,但不一定真「動態」載入記憶體中。
依dll的載入時間可細分為
1) runtime 載入 dll
2) loadtime 載入 dll

第二種其實不太能算真的動態連結…它要配合lib檔(正確講叫 import lib 檔),當程式一開始載入ram時,它也跟著就載入了。
第一種是用loadlibrary的api來真的動態載入…此種無需 import lib 檔,程式隨時載入或卸載。

再論lib檔有分二種: 樓上有說了,但我在深論一點點
1) static lib ,它其實是把obj檔做一些整理而集成,在dos時代常用的方法,是真的靜態資料庫,通常檔案有點大。
2) import lib,這個檔很小,其實只是描述某dll裡的呼叫方式… ,於創造dll時可選擇性的產生這個檔。

>>分別有Win32 Dynamic-Link Library和Win32 Static Library
>>對應到BCB,分別是DLL Wizard和Library嗎?

正確! BCB中的Library就是上面的static lib。


===================引 用 licheer 文 章===================
請教另一個問題
上面所用的dll,lib...應該算是動態連結,是嗎?
而BCB能像VC一樣使用靜態連結嗎
就是直接把程式碼產生的lib檔加進來用(不會產生dll檔)
VC在new Project時,
分別有Win32 Dynamic-Link Library和Win32 Static Library
對應到BCB,分別是DLL Wizard和Library嗎?
謝謝
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
系統時間:2024-04-24 13:32:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!