java - 通过返回字符串的 JNI 从 C++ 调用 java 函数

标签 java c++ java-native-interface

<分区>

Possible Duplicate:
How to access the Java method in a C++ application

假设我有一个这样的 Java 类:

class MyClass
{
  String value = "a string value";

  String getValue()
  {
    return value;
  }
}

我已经尝试了几个小时来实现调用 Java 函数并返回字符串的 JNI 函数。 有人可以通过片段向我展示如何使用 JNI 从 C++ 调用“getValue”函数,并从“MyClass”中获取具有 String 变量值的 jstring 变量。

//C++

jobject result;

jMethodID method_getValue = m_env->GetMethodID(native_object,"getValue","()Ljava/lang/String;");

result = m_env->CallObjectMethod(native_object, method_getValue);

最佳答案

jMethodID method_getValue = m_env->GetMethodID(native_object,"getValue","()Ljava/lang/String;");

这里native_object应该是MyClass的类定义对象(jclass)

jmethodID GetMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig);

而这里:

result = m_env->CallObjectMethod(native_object, method_getValue);

NativeType CallMethod(JNIEnv *env, jobject obj, jmethodID 方法 ID, ...);

您的 CallObjectMethod 期望第一个参数是来自 MyClass 的对象,而不是 jclass。 http://download.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html

所以这里的任何一个调用都是错误的...

可能是 getMethodID...你绝对应该在那里检查 NULL。

干杯,

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

相关文章:

java - 从嵌套列表 Spring JpaRepository 中检索对象

java - "if(<an integer> & 2)"是什么意思?

c++ - 使用无序 map 查找功能

java - 在Android中播放yuv帧

java - 使用 Android Studio 3.1 和 gradle 3.1.0 构建项目时出错

java - 我的快速排序实现不适用于 10000 个序列号

java - 如何在页面上添加图片

C++ boost spirit parantheses是如何工作的

Android NDK - 使两个 native 共享库相互调用

Android NDK 应用程序无法达到任何断点