java - 不能将 java int 传递给 jni 函数

标签 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) 在我的机器 (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/

相关文章:

java - Apache POI 打开工作簿时出错

java - 这个 android 文档中的 getSeekableFileDescriptor() 是什么?

java - 如何获取列表中不等于某个值的所有位置(不使用 for 循环)?

java - 如何在 Eclipse 中导出嵌入 native 库的可运行 JAR?

android - JNI 的 reinterpret_cast 的替代方案?

java - 如何以非递归方式重写 Ackermann 函数?

java - Pivotal Cloud Foundry - 应用程序日志记录

android - 如何将Android R8混淆应用于 native 代码?

安卓 ndk(cmake) : 'undefined reference to ` __android_log_write' when using log api in the second jni library

java - 返回既不是 JNI_FALSE 也不是 JNI_TRUE 的 jboolean 的 JNI native 方法