[問題] 如何用xe2呼叫dll內的方法

看板C_and_CPP (C/C++)作者 (XDDD)時間11年前 (2014/11/06 17:52), 11年前編輯推噓1(1011)
留言12則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) BCB xe2版本 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 目前手上有一個dll檔、h檔和lib檔(但沒有open source code) 目的是為了瞭解dll內某個function的用途,已透過軟體知道dll內所有的function nam e。 為了符合BCB格式的lib檔,已經將DLL檔透過implib.exe輸出成LIB檔,並加入到BC B的專案中。 第一次學習怎麼呼叫dll,上網查詢,是說include後就打 extern “C” __declspec(dllimport) bool __stdcall ****(char app) PS:****=dll內的function name;()內是格式 執行的時候,顯示該行 Declaration syntax error, 請問各位大大,我該如何宣告,又該如何使用dll內的特定dunction呢? 已經爬文和google找好幾天了,但都沒有找到可以解決的方法或是code, 希望可以給我相似的code讓我try try看,非常急成功者將給予5000P答謝。 謝謝 餵入的資料(Input): 預期的正確結果(Expected Output): 希望可以呼叫dll內的特定function,以了解這個方法大概是在幹嘛的(什麼作用即可) 錯誤結果(Wrong Output): 語法錯誤 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- Sent from my Android -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.134.151 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1415267520.A.476.html ※ 編輯: pony0305 (114.136.134.151), 11/06/2014 17:52:53 ※ 編輯: pony0305 (114.42.189.29), 11/06/2014 20:14:16

11/06 23:08, , 1F
Google: TK呱呱
11/06 23:08, 1F
嗯? 我谷歌了但沒有看到相關的資訊耶 ※ 編輯: pony0305 (114.42.189.29), 11/06/2014 23:53:20

11/07 11:06, , 2F
只看貼出來的code的話,你的extern "C"的"是全型
11/07 11:06, 2F
是半型的,我懷疑是和h檔內容有關,但我又看不出來 我的做法 1.將lib檔透過implib.exe轉檔成BCB可以接受的lib格式(COFF),再加到專案內。 2.inclde .h檔 3.再下一行打extern "c" _declspec(dllimport) bool ccc(char bb) ps: ccc=function name, bb=自訂變數 bool那段是直接抄襲h檔格式微調的。 流程就這樣,有誤嗎? ※ 編輯: pony0305 (116.59.210.249), 11/07/2014 11:46:41

11/07 12:02, , 3F
沒加分號? 我用bcb6試了一下,分號加上去就能過了
11/07 12:02, 3F
有喔,有加分號,我是用bcb xe2應該也一樣啊,頭痛! 我把引號重打後,錯誤顯示 only one of a set of overloaded function can be "C" ※ 編輯: pony0305 (116.59.210.249), 11/07/2014 12:46:32

11/07 13:03, , 4F
呃,include header就不用自己宣告函式了,只是header檔
11/07 13:03, 4F

11/07 13:04, , 5F
可能不合用,所以會自己宣告
11/07 13:04, 5F
我把extern 後面的"c"拿掉,編輯過了,那我要怎麼呼叫function呢? ※ 編輯: pony0305 (116.59.194.176), 11/07/2014 13:07:11

11/07 13:10, , 6F
你的header檔裡已經有宣告,應該可以直接用
11/07 13:10, 6F
哦,那我要怎麼呼叫dll內的function呢? ※ 編輯: pony0305 (116.59.194.176), 11/07/2014 13:15:09

11/07 13:20, , 7F
當一般函式直接叫用
11/07 13:20, 7F
我只要一下呼叫,程式的form就開不起來了...,s大知道大概是什麼問題嗎? ※ 編輯: pony0305 (116.59.194.176), 11/07/2014 13:39:41

11/07 13:41, , 8F
dll沒放在執行目錄下吧
11/07 13:41, 8F
我有放到專案的資料夾內,我重開專案,現在竟然顯示我電腦缺少那個dll,選項linker 內的RTL我也沒打勾(變成false)了 ※ 編輯: pony0305 (116.59.207.211), 11/07/2014 13:55:04

11/07 14:03, , 9F
不是放在專案資料夾內,是要放在執行時的工作目錄下
11/07 14:03, 9F

11/07 14:06, , 10F
預設的狀況直接跟執行檔放同個目錄就行了
11/07 14:06, 10F

11/07 14:10, , 11F
先不要管lib了 直接LoadLibrary (dll)試試...
11/07 14:10, 11F
好,我現在試試。 想問問兩位大大,我是想要利用dll內的某個功能,手上目前有dll, h和lib檔,和一份廠 商給的方法文件,dll內有幾個function沒在文件說明內,可能就是我要找的功能,但我 只有方法名稱卻沒有參數,有什麼方法可行測試,那些方法是在做什麼的嗎? ※ 編輯: pony0305 (116.59.207.211), 11/07/2014 14:35:10

11/07 19:24, , 12F
除了連絡原廠外,大概只能去trace機械碼了
11/07 19:24, 12F
前幾天忙別的事出國了,現在又要弄,現在我可以成功弄網路上教學的dll檔,但我呼叫 自己dll的時候(靜態連結),編輯成功但run就沒有反應,我上網查的結果是說找不到dll 檔,程式就不會有反應,但是我已經有把檔案都放到執行目錄下了 ※ 編輯: pony0305 (114.136.216.25), 11/11/2014 11:46:15 和本篇問題有點不同了,所以重新發文,待問題解決後,再一起給些p幣給讓我有點頭緒 的s大,謝謝 ※ 編輯: pony0305 (116.59.35.13), 11/11/2014 15:41:25
文章代碼(AID): #1KMqJ0Hs (C_and_CPP)
文章代碼(AID): #1KMqJ0Hs (C_and_CPP)