gpt4 book ai didi

java - jni CallStaticLongMethod 始终返回 0L

转载 作者:行者123 更新时间:2023-12-01 11:04:39 25 4
gpt4 key购买 nike

我在 Java 类中有一个名为 getCurrValue()

的静态方法
package com.my;
public class MyClass {
public static long value = 5L;
public static long getCurrValue(){
return value;
}
}

我在 native c/c++ 代码中有一个名为 useValue(JNIEnv* env) 的方法。当我尝试使用 Java 静态方法 getCurrValue() 获取 native c/c++ 代码中的 value 时,我总是得到 0L 结果- 为什么?

void useValue(JNIEnv* env) {
jclass clazz = env->FindClass("com/my/MyClass");
jlong result = -1L;
jmethodID get_curr_value_method_id = env->GetStaticMethodID(clazz,"getCurrValue","()J");
result = env->CallStaticLongMethod(clazz,get_curr_value_method_id);
// the result is 0L
}

最佳答案

我在装有 Android 6.0 的 Nexus 9 上以 native 方法测试了此代码,并且运行良好。

jstring Java_it_stefanocappa_ndkexample_Example_stringFromJNI( JNIEnv* env, jobject thiz ) {    
jclass clazz = (*env)->GetObjectClass(env, thiz);
jmethodID staticMethodId1;
staticMethodId1 = (*env)->GetStaticMethodID(env, clazz, "getCurrValue", "()J");
jlong staticMethodResult2;
staticMethodResult2 = (jlong) (*env)->CallStaticLongMethod(env, clazz, staticMethodId1);
return (*env)->NewStringUTF(env, "Hello from JNI);
}

如果您对我的回答不满意,请写信,我将发布整个完整的示例;)

<小时/>

按照建议更新:

我在 Github 上更新了一个几个月前实现的项目。

存储库:https://github.com/Ks89/NdkExample_AndroidStudio

查看“example.c”第 155-166 行。

显然,在这个例子中还有其他功能。

关于java - jni CallStaticLongMethod 始终返回 0L,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33075858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com