2010-12-05 6 views
7

Mögliche Duplizieren zurückgibt:
How to access the Java method in a C++ applicationAufruf einer Java-Funktion von C++ über JNI, die eine Zeichenfolge

Angenommen, ich habe wie diese eine Java-Klasse:

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

    String getValue() 
    { 
    return value; 
    } 
} 

I Ich habe seit Stunden versucht, eine JNI-Funktion zu implementieren, die eine Java-Funktion aufruft und eine Zeichenfolge zurückgibt. Könnte mir jemand durch einen Code-Schnipsel zeigt, wie die "getValue" -Funktion von einem C aufrufen ++ JNI und eine jstring Variable mit dem Wert von String-Variable von „MyClass erhalten.

// C++

jobject result; 

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

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

Zeigen Sie uns, was Sie versucht haben und sagen Sie uns, warum es nicht akzeptabel ist. –

+0

Wie wäre es, die C++ Seite zu zeigen? –

+1

Wenn du deinen Getter veröffentlichen würdest, wäre das ein Anfang ... –

Antwort

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

hier wird native_object soll die Klassendefinition Objekt (JClass) von MyClass

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

während hier sein:

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

NativeType Callmethod (JNIEnv * env, jobject OBJ, jmethodID methodId, ...);

Ihre CallObjectMethod erwartet als erster Parameter ein Objekt von MyClass, keine jclass. http://download.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html

so einer der Anrufe ist hier falsch ...

wahrscheinlich die getMethodID ... Sie auf jeden Fall für NULL es überprüfen sollten.

Prost,

Verwandte Themen