大家给点意见,使用XE写的DLL给JAVA调用使用那种方案?

xhz8000 2017-04-09 10:55:23
我在网上查了一些资料发现,有两种方案;

第一是:使用XE写好的DLL,JAVA 定义一个接口 加载DLL,然后定义DLL的接口完成;
如: public interface CLibrary extends Library {
2 CLibrary INSTANCE = (CLibrary) Native.loadLibrary("testdll", CLibrary.class); // 引入库文件
3
4 public int HelloStr(int i); // 声明方法
5 public void Hello();
6 public void HelloInt(Integer i);
7 public void HelloRRR(Integer i);
8 }
第二是:下载JIN.pas,定义jAVA类加载DLL,然后通过Native定义接口方法完成

如下:
package alvinJNI;
class HelloWorld {
static {
System.loadLibrary("DelphiAction"); //等一下我们就用Delphi来编一个程序,编好之后生成的文件就是 DelphiAction.dll 这是一个动态链接库文件,这个类里先在静态语句块中加载它
}
public native void printText(); //声明一个 native 的本地代码程序,我们使用的是 Delphi 来编写.注意:这个方法在这里只是声明,并没有定义方法体,因为这个方法我们要用 Delphi 来实现.
public static void main(String[] args) {
//创建对象并调用里面的 native 方法.
HelloWorld hw = new HelloWorld();
hw.printText();
}
}
这两种方案那个比较好点?
...全文
247 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhz8000 2017-04-11
  • 打赏
  • 举报
回复
谢谢楼上大神!
  • 打赏
  • 举报
回复
第二种用JNI的方法更通用,可以实现原生代码和Java代码之间的互相调用,甚至可以导出类,不只是函数。
xhz8000 2017-04-10
  • 打赏
  • 举报
回复
我也是看第一种比较直接点,但是后来为什么出现第二种的呢? 是不是第二种的出现 是为了解决第一种的缺陷?
  • 打赏
  • 举报
回复
都可以,第一种更直接。
xhz8000 2017-04-09
  • 打赏
  • 举报
回复
我问不是有没有问题,是那种方案更好些,或者现在都XE了,是不是有更好的方法?
我看见佛 2017-04-09
  • 打赏
  • 举报
回复
我用的是JNI,感觉没什么问题呀。项目中用的。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧