1、调用原理
用java的javah命令将java native 方法编译成.h,在C程序中调用此.h文件,并实现.h文件里面声明的方法,编译生成.dll文件,最后java通过System.loadLibrary()加载.dll文件,调用具体的方法实现;
2、具体操作步骤:
1、编译JAVA类
public class TestJNI {
// 加载编译好的.dll文件
static
{
System.loadLibrary( "VsDll" );
}
// 声明调用C的方法名称,注意用native修饰
public native static int cToJava();
// 测试是否配置成功
public static void main(String[] args) {
System.out.println(cToJava());
}
}
2、执行生成.h文件的命令
// 进入cdm,cd 到项目目录
// 生成.class文件
javac TestJNI.java
// 生成.h文件
javah TestJNI
// 生成文件如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestJNI */
#ifndef _Included_TestJNI
#define _Included_TestJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: TestJNI
* Method: cToJava
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_TestJNI_cToJava
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
3、在Visual Studio中创建VsDll项目
1、创建dll项目参考:http://jingyan.baidu.com/article/ff411625ad116612e48237a4.html
2、新建一个.cpp文件
#include "jni.h"
#include "TestJNI.h"
JNIEXPORT jint JNICALL Java_TestJNI_cToJava
(JNIEnv *, jclass){
return 1;
}
4、将生成的.dll文件拷贝到java项目下
// 配置.dll文件访问路径,以idea为例
// 在项目路径下新建一个lib文件夹将生成的.dll文件拷贝到此文
//件夹下面,并在VM中配置此参数:
-Djava.library.path=E:\javaProject\lib
3、注意事项
- 1、需要将java安装目录下**\Java\jdk1.8.0_60\include 里面的jni.h ,以及**\Java\jdk1.8.0_60\include\win32目录下的jni_md.h拷贝到vs项目的目录下
- 2、修改生成的TestJNI.h文件里面对jni.h的引用形式为: #include "jni.h",
- 3、修改在.cpp文件里面对jni的引用格式也为:#include "jni.h"
- 4、注意VS的编译器和JDK的编译要对应,比如: VS用x64,JDK是64位的,如果VS是32,JDK是64,则需要修改VS的 解决方案平台,具体参考:http://blog.csdn.net/zhounanzhaode/article/details/50322841