[問題] JNA調用BCB寫的DLL

看板java作者 (nola)時間10年前 (2015/02/05 18:28), 10年前編輯推噓5(5014)
留言19則, 4人參與, 最新討論串1/1
各位好, 最近在嘗試用 Java 呼叫 dll 內的程式 目前已知 JNI 和 簡單好用的 JNA 但使用 JNA 加入 BCB 寫的 dll 時 會出現 "Error looking up function '***': 找不到指定的程序" 已用 dependency.exe 等工具查看 dll 內的 function name 甚至寫了一個最簡單的測試 code 還是不行 請大家幫我看一下有什麼問題, 謝謝 這邊附上程式連結 http://codepad.org/xlv7rdVf 請問還是一定要寫一個 java dll介面來調用呢? ps. 同樣的 code 調用 User32.dll 是正常的 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.188.59 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1423132136.A.87F.html ※ 編輯: nola3388 (59.120.188.59), 02/06/2015 09:36:14

02/06 09:44, , 1F
直覺 pascal dll 的問題
02/06 09:44, 1F

02/06 09:45, , 2F
感謝回應, 但我進不去你打的網址 the page you are looking for cannot be found ※ 編輯: nola3388 (59.120.188.59), 02/06/2015 18:31:23

02/06 20:17, , 3F
你用了 dependency.exe 查出來是什麼名字?
02/06 20:17, 3F

02/06 20:18, , 4F
原先的 project 是用 c or c++ 寫的?
02/06 20:18, 4F
查出來的名字是 SayHi, 和 code 上面的一樣 原先的 Project, IDE 是 BCB, 內容是 C++ ※ 編輯: nola3388 (59.120.188.59), 02/09/2015 09:42:32

02/09 09:52, , 5F
c++用到pascal dll 其實也很頭大..
02/09 09:52, 5F

02/09 11:51, , 6F
如果是用 C++ 寫的,名字應該不會一模一樣xd
02/09 11:51, 6F

02/09 14:52, , 7F
c++的name mangling是個足夠搞死人的問題
02/09 14:52, 7F

02/09 14:53, , 8F
你用dumpbin看看lib export出來的跟你import的symbol
02/09 14:53, 8F

02/09 14:54, , 9F
一不一致,我覺得這個炸掉的機率頗高
02/09 14:54, 9F

02/09 14:54, , 10F
linux的話用ldd跟nm查一下
02/09 14:54, 10F

02/10 13:57, , 11F
突然想起來,然後到了這年代還得關心一下 library 是給
02/10 13:57, 11F

02/10 13:58, , 12F
32bits 用的還是給 64bits 用的,還有你的 jvm 是哪一種的
02/10 13:58, 12F
有用 dependencywalker 看過 function name 繼續 google 後發現, jna 好像只能抓到 extern "C" 的對嗎? 原本的 dll 是像 int __declspec(dllexport) __stdcall GetRate(char* name); 沒有 extern "C" 好像就抓不到 就算寫了 map也是一樣 看文章很多人建議寫一個 wrapper, 但到底要怎麼寫阿? 完全無頭緒 ※ 編輯: nola3388 (59.120.188.59), 02/10/2015 15:11:02

02/10 16:23, , 13F
弄個 function name 的圖來看看 xd
02/10 16:23, 13F

02/10 17:55, , 14F
wrapper就 用extern "C" {}包幾個function
02/10 17:55, 14F

02/10 17:56, , 15F
然後再實作檔裡面用C++的東西
02/10 17:56, 15F

02/10 17:57, , 16F
這樣被extern "C"包住的幾個function都是C Mangling
02/10 17:57, 16F

02/10 17:57, , 17F
也就是可以被JNA抓到
02/10 17:57, 17F
明天整理好所有檔案再放上來請教大家 ※ 編輯: nola3388 (59.120.188.59), 02/10/2015 18:50:33 下載網址: http://ptt.cc/NUWD *.java 是我測試過的方式, 請強者教一下, 謝謝~ ※ 編輯: nola3388 (59.120.188.59), 02/11/2015 12:12:38

02/11 13:22, , 18F
網址錯了
02/11 13:22, 18F
Sorry, 是 http://ppt.cc/NUWD ※ 編輯: nola3388 (59.120.188.59), 02/12/2015 12:40:18

02/17 09:15, , 19F
function name 怎麼多了一個底線 (抓頭
02/17 09:15, 19F
文章代碼(AID): #1KqqNeX_ (java)
文章代碼(AID): #1KqqNeX_ (java)