欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

JNI的方式调用DLL(SO)(上)

发布时间:2025/3/15 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 JNI的方式调用DLL(SO)(上) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

      最近有个项目要调用原有的DLL文件,本来准备使用JNA,可是客户不同意,非要使用JNI的方式。万般无奈之下,只能重新使用JNI,现将JAVA调用动态链接库的一般方法总结如下。

      JNI是Java Native Interface(JAVA本地调用)的缩写。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

      使用JNI调用DLL文件的步骤一般有以下几步:

         1、编写带有native声明的方法的java类

         2、使用javac命令编译所编写的java类

         3、使用javah命令编译成头文件 

         4、使用C/C++实现本地方法(包含第3步生成的头文件)

         5、将C/C++编写的文件生成动态连接库

      下面将通过实例详细介绍上面5步的具体实现

–> 编写带有native声明的方法的java类,代码如下:

View Code 1 package com.wanggc.jni; 2 3 public class MyJniNativeMethods { 4 /** 5 * 取最大值。 6 * 7 * @param data1 8 * 数据1 9 * @param data2 10 * 数据2 11 * @return 12 */ 13 public native int getMaxData(int data1, int data2); 14 15 /** 16 * 向某人问好。 17 * 18 * @param name 19 * 人名 20 * @return 21 */ 22 public native String getGreeting(String name); 23 24 /** 25 * 加载动态链接库 26 */ 27 static { 28 System.loadLibrary("testJni"); 29 } 30 31 /** 32 * 入口主函数。 33 * 34 * @param args 35 */ 36 public static void main(String[] args) { 37 MyJniNativeMethods jniTest = new MyJniNativeMethods(); 38 // 调用第一个本地方法得到两个数中的最大值 39 int maxData = jniTest.getMaxData(100, 150); 40 System.out.println(maxData); 41 42 // 调用第二个本地方法想某人问好 43 String hello = jniTest.getGreeting("王国成"); 44 System.out.println(hello); 45 } 46 }

      13行和22行包含了两个本地方法,getMaxData和getGreeting,注意本地方法只需有方法名,不需要方法体。需要使用native关键字修饰。27-29行用于加载动态链接库。注意DLL文件不要后缀,只要名称就可以了。

–> 使用javac命令编译所编写的java类,如果是用eclipse编写的代码,不须使用此命令,使用project菜单的clean选项编译一下就可以了。

–> 使用javah命令编译成头文件 

     编译好class文件后,打开CMD窗口,转到bin目录,运行

转载于:https://www.cnblogs.com/gulvzhe/archive/2012/04/29/2476460.html

总结

以上是生活随笔为你收集整理的JNI的方式调用DLL(SO)(上)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。