- 论坛徽章:
- 0
|
JNI:Java Native Interface
允许Java代码和其他语言(如c/c++)编写的代码进行交互
㊣ JNI的实现具体步骤
1 编写带native方法声明的Java类
编写带本地方法声明的类ExJNI.java
public class ExJNI {
// 加载ExJNI.dll文件
static {
System.loadLibrary("ExJNI");
}
// 显示欢迎信息
public native void welcome();
// 计算int[]数组之和
public native int sum(int[] numbers);
// 显示欢送信息
public native void bye();
}
2 使用javac命令编译java类
javac ExJNI.java
3 使用javah命令生产头文件
javah -jni ExJNI (自动生成ExJNI.h头文件如下)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class ExJNI */
#ifndef _Included_ExJNI
#define _Included_ExJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: ExJNI
* Method: welcome
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_ExJNI_welcome
(JNIEnv *, jobject);
/*
* Class: ExJNI
* Method: sum
* Signature: ([I)I
*/
JNIEXPORT jint JNICALL Java_ExJNI_sum
(JNIEnv *, jobject, jintArray);
/*
* Class: ExJNI
* Method: bye
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_ExJNI_bye
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4 编写本地实现方法
编写ExJNI.cpp实现本地方法
#include
#include
#include "ExJNI.h"
JNIEXPORT void JNICALL Java_ExJNI_welcome(JNIEnv *env, jobject obj)
{
printf(" - - - Welcome Here - - - \n");
return ;
}
JNIEXPORT jint JNICALL Java_ExJNI_sum(JNIEnv *env, jobject obj, jintArray nums)
{
int i, sum = 0;
jsize len = env->GetArrayLength(nums);
jint *numbers = env->GetIntArrayElements(nums, 0);
for (i = 0; i
{
sum += numbers;
}
env->ReleaseIntArrayElements(nums, numbers, 0);
return sum;
}
JNIEXPORT void JNICALL Java_ExJNI_bye(JNIEnv *env, jobject obj)
{
printf(" - - - Bye, See You - - - \n");
return;
}
5 生成c/c++代码的动态链接库
cl -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 -LD ExJNI.cpp -FeExJNI.dll(注意空格)
6 编写测试类
public class ExMain {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5, 6};
ExJNI exjni = new ExJNI();
exjni.welcome();
int sum = exjni.sum(numbers);
System.out.println("\tsum = " + sum);
exjni.bye();
}
}
㊣个人理解
参考jni.h头文件(一般放置的位置为%JAVA_HOME%\include目录下)
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22660/showart_160156.html |
|