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

时间:2010-12-05 15:20:25

标签: java c++ java-native-interface

  

可能重复:
  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);

1 个答案:

答案 0 :(得分:6)

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 methodID,...);

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

所以这里的任何一个电话都是错的......

可能是getMethodID ......你一定要检查那里的NULL。

欢呼声,