最近需要用到JNI,所以抽时间学习了下,对于我这个N年没用过C/C++的,从没用过VS2005的java码农来说,真不容易,编译个dll都遇到莫名其妙的问题~~

下面就来一步一步开始JNI之路。

首先,我们写一个java类,声明几个native方法

package jni.test;

public class JNIWrapper {

    public native void display();

    public native double sum(double x, double y);
    
    public native double divide(double x, double y);
}

然后,依次执行如下命令,依次得到class和.h文件

编译class
...\src>javac jni\test\JNIWrapper.java

生成头文件
...\src>javah jni.test.JNIWrapper

到这里就得到了一个名为“jni_test_JNIWrapper.h”的头文件,其内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jni_test_JNIWrapper */

#ifndef _Included_jni_test_JNIWrapper
#define _Included_jni_test_JNIWrapper
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     jni_test_JNIWrapper
 * Method:    display
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_jni_test_JNIWrapper_display
  (JNIEnv *, jobject);

/*
 * Class:     jni_test_JNIWrapper
 * Method:    sum
 * Signature: (DD)D
 */
JNIEXPORT jdouble JNICALL Java_jni_test_JNIWrapper_sum
  (JNIEnv *, jobject, jdouble, jdouble);

/*
 * Class:     jni_test_JNIWrapper
 * Method:    divide
 * Signature: (DD)D
 */
JNIEXPORT jdouble JNICALL Java_jni_test_JNIWrapper_divide
  (JNIEnv *, jobject, jdouble, jdouble);

#ifdef __cplusplus
}
#endif
#endif
jni_test_JNIWrapper.h

相关文章: