Java Native Interface例程

来源:互联网 发布:飞机票抢票软件 编辑:程序博客网 时间:2024/05/16 06:15

windows下,使用BlueJ和Pelles C编写的例程。

1.创建Java项目。

方便起见,在现有项目codes的API中创建一个包jni,创建一个类:

package API.jni;public class JniDemo{//API.jni.JniDemo    static {        System.load("等一下再填");    }    public native int nativeAdd(int x, int y);    public static void test() {        System.out.println(new JniDemo().nativeAdd(100, 3));    }}

2.javah

cmd窗口,使用下面的命令(javah -jni  类全名),在项目的根目录下,生成一个C语言头文件

...codes>javah -jni API.jni.JniDemo

修改生成的API_jni_JniDemo.h,将#include <jni.h>改为#include "jni.h"(不知道为什么要生成尖括号)


3.创建Win64 DLL项目,随意取名C64,位置就近放在jni文件夹下。

将API_jni_JniDemo.h和它需要的jni.h(通常为D:\Program Files (x86)\Java\include)以及后者需要的jni_md.h(D:\Program Files (x86)\Java\include\win32),复制粘贴到C64文件夹下。

#include "API_jni_JniDemo.h"JNIEXPORT jint JNICALL Java_API_jni_JniDemo_nativeAdd (JNIEnv * env, jobject obj, jint x, jint y){        return x+y;}
保存为某名.c文件。编译得到c64.dll。用c64.dll文件的绝对路径如“D:\编程导论\codes_补充\API\jni\c64\c64.dll”,将\搞成\\,替换JniDemo代码中的“等一下再填”。

System.load("D:\\编程导论\\codes\\API\\jni\\c64\\c64.dll");

运行test:4.

在BlueJ中重启JVM,修改参数nativeAdd(10, 3),运行结果:13.

常见问题:

  • 【Q】没有用过BlueJ,咋办?【A】那就用记事本好了,目录搞清楚。
  • 【Q】javah?【A】path
  • 【Q】VC++ 6.0?【A】用VS也好过VC。
  • 【Q】Cygwin?【A】能够用一下Cygwin,是最好的。大多数同学用windows,不好。

参考资料:

  • http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html
  • 使用 Java Native Interface 的最佳实践

1 0
原创粉丝点击