JNI多个变量

时间:2012-04-03 11:35:41

标签: java c java-native-interface

我通过将许多变量从Java传递到C

来使用JNI
public native int[] intArrayMethod(int[] t,int nbr,int tag);

如何在C中使用这些变量? 我已生成头文件,我获得了:

#ifndef _Included_MainClass
#define _Included_MainClass

#ifdef __cplusplus
extern "C" 
{
#endif

/*
 Class:     MainClass
 Method:    intArrayMethod
 Signature: ([FII)[I
*/

    JNIEXPORT jintArray JNICALL Java_MainClass_intArrayMethod
        (JNIEnv *, jobject, jfloatArray, jint, jint);

#ifdef __cplusplus
}
#endif

#endif

如何使用我的C代码中传递的变量?

1 个答案:

答案 0 :(得分:0)

  • 编写.c文件以匹配 - 相同的标题,但带有正文{}和参数名称。
  • 使用变量执行某些操作
  • 返回结果

代码:

#include "foo.h"
JNIEXPORT jintArray JNICALL Java_MainClass_intArrayMethod 
(JNIEnv * env, jobject obj, jfloatArray arr, jint a, jint b) {

     jintArray ret[2];
     ret[0] = a + b;
     ret[1] = arr[0] + arr[1];
     return ret;
}

用这样的东西编译:

gcc -shared foo.c -I/path/to/java/include -o libfoo.so

不要忘记在Java代码中包含一个加载行:

static {
   System.loadLibrary("foo"); // does not include lib prefix, or .dll/.so suffix!
}

运行此命令,(假设当前目录中有libfoo.so)。

java -Djava.library.path=. Foo