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

kla*_*han 8 c++ java java-native-interface

可能重复:
如何在C++应用程序中访问Java方法

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

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

  String getValue()
  {
    return value;
  }
}
Run Code Online (Sandbox Code Playgroud)

我一直在努力实现一个调用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);
Run Code Online (Sandbox Code Playgroud)

Nay*_*rhc 6

jMethodID method_getValue = m_env->GetMethodID(native_object,"getValue","()Ljava/lang/String;");
Run Code Online (Sandbox Code Playgroud)

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

jmethodID GetMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig);
Run Code Online (Sandbox Code Playgroud)

而在这里:

result = m_env->CallObjectMethod(native_object, method_getValue);
Run Code Online (Sandbox Code Playgroud)

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.

干杯,