導入VC來的DLL檔的問題 |
答題得分者是:aftcast
|
leochen1204
一般會員 發表:10 回覆:14 積分:4 註冊:2008-11-06 發送簡訊給我 |
請問我想要在BCB裡使用一個從VC專案裡抓來的USB控制的DLL檔. "USB_HID.dll"
我先利用implib將 USB_HID.dll轉成USB_HID.lib , 再將USB_HID.h檔及.lib檔copy到BCB專案中. 然後在Main.cpp中加入 #include "USBpro.h" HANDLE m_hUSBDevice; ... ... void __fastcall TMDIForm::Button1Click(TObject *Sender) { int status; status=SI_USB_INIT(&m_hUSBDevice); if(status){ Edit2->Text = "USB 連線ok!"; } } 這樣好像不行厚... 會出現[Linker Error] Error: Unresolved external 'SI_USB_INIT(void * *)' referenced ... 這是哪裡不對呢??? 附件link: http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=96257 編輯記錄
taishyang 重新編輯於 2008-12-01 10:13:23, 註解 無‧
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
|
leochen1204
一般會員 發表:10 回覆:14 積分:4 註冊:2008-11-06 發送簡訊給我 |
那可以幫我解釋一下這行的error是什麼意思嗎?
[Linker Error] Error: Unresolved external 'SI_USB_INIT(void * *)' referenced from C:\CTRL_20081127\DEBUG_BUILD\MAIN.OBJ 我的lib是用 implib -a -c -f xxx.lib xxx.dll的方式產生的 然後將 .lib及.h檔copy進去 專案中Add .lib檔 main.cpp 中 #include "xxx.h" 檔 |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
你好
如果還是不能解決,那請你把dll還有h檔rar上傳,我試著幫你制作lib檔看看,然後再把結果和你說 ===================引 用 leochen1204 文 章=================== 那可以幫我解釋一下這行的error是什麼意思嗎? [Linker Error] Error: Unresolved external 'SI_USB_INIT(void * *)' referenced from C:\CTRL_20081127\DEBUG_BUILD\MAIN.OBJ 我的lib是用 implib -a -c -f xxx.lib xxx.dll的方式產生的 然後將 .lib及.h檔copy進去 專案中Add .lib檔 main.cpp 中 #include "xxx.h" 檔
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
leochen1204
一般會員 發表:10 回覆:14 積分:4 註冊:2008-11-06 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
你好,
關於你二個dll的問題,其中一個很完整,即SiUSBXp.dll這個是使用stdcall的方式export出來的,很容易轉換,而它的header也宣告很完整。 然而USB_HID這個dll就不一樣了,我懷疑是出自同一個人(廠商)出來的嗎? 這個dll檔本的export function name被mangling過,這不是標準的寫法,一般來說只能專給vc使用。但我還是用了內力幫你修改了… 所以原來的dll被我修改成USB_HID_cb.dll,header檔也被我修正為USBpro_bc.h。另外多了二個bcb的lib檔USB_HID_cb.lib與SiUSBXp.lib。 至於修改的原理,它有太多的深入技術背景知識,一時半刻也無法說清楚。待你未來有時間去探討吧~ 附上修好的dll加上我的test project http://delphi.ktop.com.tw/download.php?download=upload/49337ac62b2a5_temp.rar
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2008-12-01 13:59:34, 註解 無‧
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
這個dll檔本的export function name被mangling過,這不是標準的寫法,一般來說只能專給vc使用。但我還是用了內力幫你修改了…
所以原來的dll被我修改成USB_HID_cb.dll,header檔也被我修正為USBpro_bc.h。另外多了二個bcb的lib檔USB_HID_cb.lib與SiUSBXp.lib。 至於修改的原理,它有太多的深入技術背景知識,一時半刻也無法說清楚。待你未來有時間去探討吧~ 前輩內力深厚,等您有空,記得解說一下原理喔^_^ 之前用extern "C" 結果function name前面多了個底線,比對了兩個dll 發現前輩把 ? 改成 _ 就可以work,真厲害 |
leochen1204
一般會員 發表:10 回覆:14 積分:4 註冊:2008-11-06 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
你有試過aftcast前輩提供的範例嗎?
我測試過,是可以用的 ===================引 用 leochen1204 文 章=================== 請問專案裡要Add 兩個DLL檔嗎? 只Add兩個lib的話 編譯後會出現 "這個應用程式無法啟動,因為找不到 USB_HID_CB.DL,重新安裝應用程式可能可以解決這個問題。" 如果把DLL也ADD進來的話, 會出現Link Error [Linker Error] Error: Error processing module C:\Temp\USB_HID_CB.DLL |
leochen1204
一般會員 發表:10 回覆:14 積分:4 註冊:2008-11-06 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
我想前輩用的IDE應該是BCB6.0
只需要將lib檔加入專案中 BCB6.0的方式為[Project]->[Add to project] ===================引 用 leochen1204 文 章=================== 有, 但是因為沒有 bdsproj檔, 所以我不知道lib與DLL要怎麼在專案中載入. |
leochen1204
一般會員 發表:10 回覆:14 積分:4 註冊:2008-11-06 發送簡訊給我 |
可是這樣DLL要放在哪兒呢?
好像應該放在同一資料夾中, 可是會出現"應用程式無法啟動, 因為找不到XXXX.DLL檔....." 或是說專案要設定Options讓它找得到DLL檔? ===================引 用 taishyang 文 章=================== 我想前輩用的IDE應該是BCB6.0 只需要將lib檔加入專案中 BCB6.0的方式為[Project]->[Add to project] ===================引 用 leochen1204 文 章=================== 有, 但是因為沒有 bdsproj檔, 所以我不知道lib與DLL要怎麼在專案中載入. |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
leochen1204
一般會員 發表:10 回覆:14 積分:4 註冊:2008-11-06 發送簡訊給我 |
我知道問題了~
因為在Run的時候是會建立一個Debug_Build的資料夾, 所以.dll檔案要自己先copy進去, 這樣在Run time階段才可以找到DLL檔~ 感謝指導! ===================引 用 taishyang 文 章=================== 我用前輩的範例什麼都沒動,直接編譯就OK了 dll放在跟exe同一路徑中
編輯記錄
leochen1204 重新編輯於 2008-12-01 21:27:22, 註解 無‧
|
boltnut
一般會員 發表:5 回覆:12 積分:3 註冊:2010-02-06 發送簡訊給我 |
前輩我遇到相同的問題,但是是Silicon labs 2009版的USB DLL. 請問如何判斷原廠提供的是static 或dynamic DLL 呢? 我自己嘗試兩種方法都不行哩: 1) implib -a SiUSBXp_BCB.lib SiUSBXp.dll 2) coff2omf.exe SiUSBXp.lib SiUSBXp_BCB.lib 會不會這次2009版的USB DLL是dynamic DLL 呢? 請問該如何處理呢?能否step-by-step 說明一下呢? 原廠提供了SiUSBXp.dll, SiUSBXp.lib 和 SiUSBXp.h三個檔案.
編輯記錄
boltnut 重新編輯於 2010-04-12 21:43:35, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |