假设我有一个像这样的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);
答案 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。
欢呼声,