一个简单的JNI使用
环境:eclipes,VC++ 6.0
1, 在eclipes下新建java工程,名为:HelloWorld
在文件HelloWorld.java中添加如下代码:
public class HelloWorld
{
private native void print();//没有实现的函数,表示要调用的本地函数
public static void main(String[] args) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");//加载库文件(.dll for win32 && .so for Solaris)。确保函数被调用前被加载
}
}
2, 编译HelloWorld.java文件,生成HelloWorld.class
3, 创建本地头文件。
javah -jni HelloWorld
命令的使用请参考javah –help
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif注意:尽管在java中声明的print函数没有参数,但在生成的头文件中有两个参数:第一个参数是JNIEnv接口指针(具体是什么,怎么用还没学会);第二个参数是HelloWorld对象的引用,相当于C++中的this。
4, 新建DLL工程,根据头文件编写.cpp文件
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!/n");
return;
}
注意:jni.h 可以在jdk的include目录下找到
建议将相关的文件复制到工程目录下,添加additional include 目录
5, 编译VC++工程,生成.DLL文件
6, 将DLL文件放在本地目录下
7, 运行