我在 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) 在我的机器 (red-hat) 上产生 4 个字节
最佳答案
您的签名不正确(您是否使用了 javah?)。 JNI 函数的第二个参数是对象(对于对象方法)或类(对于静态类方法)。
您的声明应该如下所示:
JNIEXPORT jint JNICALL Java_dri_put(JNIEnv* env, jclass cls, jstring js, jint ji);
关于java - 不能将 java int 传递给 jni 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10740876/