JNI基本使用

适合有一定jni知识的人

我的环境:Eclipse3.5,VS2008,JDK1.6.18

1 首先获取开发工具。这个还是自己去找吧

2 在Eclipse下新建Java工程Hello,并进行包com.zl,在包下新建类Hello.java

图一 工程截图

代码:

package com.zl;
public class Hello {
public native int add(int a, int b);
public native int sub(int a, int b);
}

主要定义两个本地调用方法作为测试方法

3 打开命令行,找到自己工程所在目录,定位到bin目录,执行javah -jni com.zl.Hello生成C/C++头文件

图二 C/C++头文件生成截图

4 打开VS2008,新建win32控制台应用程序,并选择应用类型为dll

图三 新建win32应用程序

图四:选择类型为dll,并勾选“导出符号”


5 将先前生成的头文件com_zl_Hello.h以及jdk/include下的jni.h和jdk/include/win32下的jawt_md.h和jni_md.h复制到工程下面,并在VS中将头文件添加进工程

图五:添加头文件

6 修改com_zl_Hello.h中的#include <jni.h>改为#include "jni.h",因为jni.h作为用户文件非系统文件,需要修改。然后在源文件中添加C++源文件com_zl_Hello.cpp,其实现代码如下:

#include "stdafx.h"
#include "com_zl_Hello.h"
JNIEXPORT jint JNICALL Java_com_zl_Hello_add
(JNIEnv *env, jobject obj, jint a, jint b) {
return (a+b);
}
JNIEXPORT jint JNICALL Java_com_zl_Hello_sub
(JNIEnv *env, jobject obj, jint a, jint b) {
return (a-b);
}


7 执行生成操作,将会在工程上级的DEBUG目录下找到hello.dll文件

8 Eclipse中的操作:将Hello工程导出为Hello.jar包后,新建CallJava工程

Hello.jar包,并将hello.dll放到CallJava工程的根目录下。新建Java文件,调用相关代码,查看结果。

public static void main(String[] args) {
//加载hello.dll库
System.loadLibrary("hello");
Hello hello = new Hello();
//调用add方法
System.out.println(hello.add(1, 2));
hello.sub(2, 1);
}