9

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

Suppose I have a Java class like this :

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

  String getValue()
  {
    return value;
  }
}

I've been trying for hours to implement a JNI function that calls a Java function and returns a string. Could someone show me through a snippet how to call the "getValue" function from a C++ using JNI and obtain a jstring variable with the value of String variable from "MyClass.

// C++

jobject result;

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

result = m_env->CallObjectMethod(native_object, method_getValue);
Community
  • 1
  • 1
klaus johan
  • 4,370
  • 10
  • 39
  • 56

1 Answers1

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

here, native_object is supposed to be the class definition object (jclass) of MyClass

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

whereas to here:

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

NativeType CallMethod(JNIEnv *env, jobject obj, jmethodID methodID, ...);

Your CallObjectMethod expects as first parameter an object from MyClass, no jclass. http://download.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html

so either one of the calls is wrong here...

probably the getMethodID... you should definitely check for NULL there.

cheers,

Vladimir Ivanov
  • 42,730
  • 18
  • 77
  • 103
Naytzyrhc
  • 2,297
  • 26
  • 39