无法将java int传递给jni函数

时间:2012-05-24 15:47:02

标签: java java-native-interface

我在test.cpp中有一个简单的jni函数:

#include <jni.h>
#include <stdio.h>

extern "C" {

JNIEXPORT jint JNICALL Java_dri_put(JNIEnv* env, jstring js, jint ji){

    printf("%d \n", ji);
    int t = ji;
    printf("%d \n", t);
    int k = -3412;
    return k;
 }
 }

我的java类javatest.java:

public class javatest {
  public static void main(String args[]) {
    System.loadLibrary("test");
    int t = 134;
    int k = dri.put("a", 5641);
    System.out.println(k);
  }
 }

输出只打印一些随机数的传递整数:

1075968840

1075968840

-3412

但是,如果我将jint更改为jdouble并传递java double变量,它可以正常工作,感谢这里的任何帮助。

dri java类是:

public class dri
{
  public final static native int put(String jarg1, int jarg2);
}

sizof(int)在我的机器上产生4个字节(红帽)

1 个答案:

答案 0 :(得分:12)

您的签名不正确(您使用的是javah吗?)。 JNI函数的第二个参数是对象(对象方法)或类(对于静态类方法)。

您的声明应该是这样的:

JNIEXPORT jint JNICALL Java_dri_put(JNIEnv* env, jclass cls, jstring js, jint ji);