2010-12-05 24 views
7

Possible en double:
How to access the Java method in a C++ applicationAppel d'une fonction java de C++ via JNI qui retourne une chaîne

Supposons que j'ai une classe Java comme ceci:

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

    String getValue() 
    { 
    return value; 
    } 
} 

I J'ai essayé pendant des heures d'implémenter une fonction JNI qui appelle une fonction Java et renvoie une chaîne de caractères. Quelqu'un pourrait-il me montrer à travers un extrait comment appeler la fonction "getValue" à partir d'un C++ en utilisant JNI et obtenir une variable jstring avec la valeur de la variable chaîne de « MyClass.

// C++

jobject result; 

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

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

Montrez-nous ce que vous avez essayé de nous dire pourquoi ce n'est pas acceptable. –

+0

Pourquoi ne pas afficher le côté C++? –

+1

Rendre votre getter public serait un début ... –

Répondre

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

ici, native_object est censé être l'objet de définition de classe (JClass) de MyClass

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

alors ici:

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

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

Votre CallObjectMethod attend en tant que premier paramètre un objet de MyClass, pas de jclass. http://download.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html

donc soit l'un des appels est faux ici ...

probablement le getMethodID ... vous devriez certainement vérifier pour NULL là.

cheers,