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。
干杯,