从 java 传递给 jni 的参数返回奇怪的值

Argument passed to jni from java are returning weird values

提问人:Clamore 提问时间:12/8/2022 最后编辑:marc_sClamore 更新时间:8/8/2023 访问量:65

问:

我正在尝试从 android 应用程序中的 Java 代码中调用 JNI 函数, 调用了该函数,但 JNI 函数中的参数值与函数中传递的参数值不同。

这是我的 java 声明和调用:

public native void setIA(Integer model);
setIA(1);

这是我的 JNI 函数

extern "C" JNIEXPORT void JNICALL
Java_com_sfy_vitaltechnics_Utils_Parameters_setIA(JNIEnv *env, jobject thiz, jint model) {
    LOGD( "This is a number from JNI: %d", model );
}

我得到的值像 -578062932 但它永远不会是相同的值。

我尝试了几种强制转换和类型的参数(long、double、float、string 及其 java 等价物)。

每次它都会返回一个奇怪的值(对于字符串,它返回非 UTF-8 字符)。

我认为问题出在我声明函数的方式上,但我不确定

Android C++ java-native-interface 参数传递

评论

0赞 user207421 8/10/2023
(1) 你是如何从该本机声明中获取该函数标头的?如果您按预期使用,这永远不会发生。但是(2)为什么你要通过而不是首先通过?javapIntegerint

答:

2赞 user7860670 12/8/2022 #1

Integer对应于 C 函数,因此您应该更改 C 函数或更改 java 声明以匹配现有的 C 函数。jobjectsetIA(int model);