[问题] JNA调用BCB写的DLL

楼主: nola3388 (nola)   2015-02-05 18:28:53
各位好, 最近在尝试用 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 是正常的
作者: realmeat (真肉)   2015-02-06 09:44:00
直觉 pascal dll 的问题http://www.javawebdevelop.com/1791097/
作者: qrtt1 (有些事,有时候。。。)   2015-02-06 20:17:00
你用了 dependency.exe 查出来是什么名字?原先的 project 是用 c or c++ 写的?
作者: realmeat (真肉)   2015-02-09 09:52:00
c++用到pascal dll 其实也很头大..
作者: qrtt1 (有些事,有时候。。。)   2015-02-09 11:51:00
如果是用 C++ 写的,名字应该不会一模一样xd
作者: Killercat (杀人猫™)   2015-02-09 14:52:00
c++的name mangling是个足够搞死人的问题你用dumpbin看看lib export出来的跟你import的symbol一不一致,我觉得这个炸掉的机率颇高linux的话用ldd跟nm查一下
作者: qrtt1 (有些事,有时候。。。)   2015-02-10 13:57:00
突然想起来,然后到了这年代还得关心一下 library 是给32bits 用的还是给 64bits 用的,还有你的 jvm 是哪一种的弄个 function name 的图来看看 xd
作者: Killercat (杀人猫™)   2015-02-10 17:55:00
wrapper就 用extern "C" {}包几个function然后再实作档里面用C++的东西这样被extern "C"包住的几个function都是C Mangling也就是可以被JNA抓到
作者: swallowcc (guest)   2015-02-11 13:22:00
网址错了
作者: qrtt1 (有些事,有时候。。。)   2015-02-17 09:15:00
function name 怎么多了一个底线 (抓头

Links booklink

Contact Us: admin [ a t ] ucptt.com