gpt4 book ai didi

java - 通过 JNI 在 Android 上从 C++ 调用 Java 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:10 31 4
gpt4 key购买 nike

我正在使用 JNI 从 Android 调用 C++,到目前为止它可以正常工作。现在我需要在该 C++ 函数中使用 Java 的一些功能,并尝试从 C++ 回调到 Java。我检查了 stackoverflow 上的各种解决方案和网上的其他资源,但不知何故我无法让它工作。

我总是收到以下异常“W/dalvikvm(358):JNI 警告:无法调用 Lcom/main/Main;.Lcom/main/Main 实例上的消息;

任何人都可以给我任何建议吗?我是不是遗漏了什么、疏忽了什么,或者仅仅是错误的代码?

这是我想从 C++ 调用的 Java 部分:

public class Main extends Activity  
{
public native String JNIInit();

String message(String text)
{ text = text + "from java";
return text;
}
.
.
}

这是我可以从 Java 成功调用但无法回调到 Java 的 C++ 函数:

extern "C" JNIEXPORT jstring JNICALL Java_com_main_Main_JNIInit(JNIEnv* env, jobject obj)
{ jstring jstr = env->NewStringUTF("From jni");
jclass cls = env->FindClass("com/main/Main");
jmethodID method = env->GetMethodID(cls, "message", "(Ljava/lang/String;)Ljava/lang/String;");
jobject result = env->CallObjectMethod(obj, method, jstr);
return env->NewStringUTF(str);
}

PS:我知道这里有几个关于这个主题的话题,但我还是无法让它工作。一定有什么我想念的东西,我就是想不通那是什么。

最佳答案

不使用 FindClass,您可以尝试使用:(*env)->GetObjectClass(env, obj);

关于java - 通过 JNI 在 Android 上从 C++ 调用 Java 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9428001/

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