折腾JNI

最近有个功能用到了JNI,于是就开始拆腾JNI。有些感悟,分享一下。

通过JNI本身代码来调用native代码感觉上有点绕。也就是说你必须按照流程来做。

                  1)声明native方法,在你要调用JNI的类,假定命名为example.java

                  2)通过javah example.java生成C++的头文件。

                  3)通过在C++代码里面添加此头文件,并实现native方法。

这样下来就能够在java中调用到这你所实现的native方法,可以得出一个观点,如果你需要通过java调用其它语言的写的native方法,先应该先实现用C++对这种语言的调用,再集成到java。C++充当一个适配器的角色。

         如果你不想用JNI写这些繁琐的过程,你也可以通过另外一个framework来实现,比如JNative, 对比JNI直接写的话,这种方式来的比较直观和简便。俗话说“简单才是王道”,在调用不是很复杂的情况下,推荐用它来实现native的调用,比如调用一个windows系统dll(user32.dll)。如果情况比较复杂,那么我们还是得用JNI来做,本人碰到的一个对delphi的dll调用的问题,内部接口的参数是一个窗口句柄,而且不能是默认的桌面句柄(Zero)。在使用JNative的时候就一直过不去。报的错误也是蛮莫名其妙的。此功能调用如果用C#的话很简单,传入new出来的窗口句柄就能够成功调用。所以我想应该是句柄参数的问题。

这样的话你就得通过JNI调用C++的方式来实现对delphi的dll调用。由于要用C++编码,本人还没来得急尝试,不过理论上是可以的,以后有空的话尝试完再补上代码:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值