大神博客:http://blog.sina.com.cn/s/blog_4bb52a1601012x8j.html
主要步骤
一 声明一个Java类,将其中的需要C实现的函数声明为native
二 用javac 编译 .java文件生成一个 .class文件
三 用javah 编译 生成C/C++的头文件.h
四 创建动态链接库项目并包含必要的java的.h文件
注意事项--
1.头文件中包含了jni.h头文件,所以需要将jdk安装目录下include文件夹下的jni.h头文件
和include\win32文件夹下的jawt_md.h和jni_md.h头文件拷贝到visual studio的安装目录下vc\include文件夹下。
我的路径是:C:\Program Files\Microsoft Visual Studio 9.0\VC\include
也可以把jdk下的那三个头文件拷贝到vc++的项目目录下,
编写C函数代码实现头文件中声明的函数。
2.注意编译运行的平台根据需要使用32或64位
.java文件
public class test {
static {
System.loadLibrary("Test_k");
}
public native static int get();
public native static void set(int i);
public static void main(String[] args) {
test test = new test();
test.set(10);
System.out.println(test.get());
}
}
.h文件
懒 jni.h等文件 没拷贝到库文件中,直接拷贝到项目中
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class test */
#ifndef _Included_test
#define _Included_test
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: test
* Method: get
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_test_get
(JNIEnv *, jclass);
/*
* Class: test
* Method: set
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_test_set
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
1.其中 jint 在VS2013下为 long 类型
2.
实现部分
#include "test.h"
int i = 0;
JNIEXPORT jint JNICALL Java_test_get
(JNIEnv *, jclass){
return i;
}
JNIEXPORT void JNICALL Java_test_set
(JNIEnv *, jclass, jint j){
i = j;
}
生成的动态链接库
最少执行.class文件 ,只需要两个文件 .class文件和动态链接库 .dll 文件