Java Native Interface(Java 调用Delphi、C、C++编写的DLL)

    前些日子,就在两天前,由于公司业务上的需求,需要用Java调用另外一Delphi公司编写的代码,然后再用WebService做相对应的数据交互。当时,彼公司提供了一套测试代码,当然是delphi的代码和一套DLL, 另附DOC接口文档一套。由于公司内部没有Delphi的编程经验,只能写相关的java代码来调用彼公司提供的DLL。

    而Java调用DLL有两种方法, 一种就是JNI,Java Native Interface,另外一种就是JNA,Java Native Access。这两种调用方法前一个是JAVA内置支持的,但对DLL的编写有一定的约束,也就是说如果你先写java代码,然后用相关的约束再编写DLL是可行的。另一种情况就是我公司碰到的情况,两个毫无业务来往的公司写的程序,突然之间需要产生调用关系,也就是说DLL的编写是没有任何约束的,这样使用JNI就显得相当困难,除非两个公司能够很好的合作,否则调用将异常困难。当然解决方法就是采用JNA,但JAVA本身并不支持JNA,需要第三方类库的支持,也就是JNA.JAR,这个类库可以在java.net上找到该开源工程的主页,里面有对应的文档和示例代码。

    但不管是JNI还是JNA,其与DLL交互的原理都是通过计算机系统的底层来实现的。拿windows来说,java与dll的交互是通过windows的com组件来交互的,也就是说com是中间的接口。那么java调用DLL的最基本的约束就出来了:

    java调用DLL时,如果涉及到参数传递时,那么参数的类型必须在com中有相关的对应关系,否则不可能产生调用关系(Type Mapping可以参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ppl2046

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值