2011-12-24 5 views
0

私はさまざまなパラメータを取ることができるJava関数を持っており、JNIではjobjectArrayのすべてのパラメータを受け取ります。しかし、問題はString型で利用可能なすべてのパラメータですが、もともとは異なるデータ型のものです。したがって、c/C++では元の型に変換することはできません。だからもし私がこれらの変換をme.isのために簡単にJNIのネイティブコードからJavaメソッドを呼び出すことができるいくつかの他のJavaメソッドを呼び出すことができますか?ネイティブコードからjavaメソッドを呼び出すことはできますか?そうですね?

私を助けてください。私は長い間、それを本当に打たれています。前もって感謝します。

答えて

1

env-> NewStringUTF(実際のパラメータ)を使用してJavaメソッドをコールバックすると、文字列をネイティブコードのパラメータとして渡すことができます。

1

ここに、簡略な例を示します。http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.htmlです。

呼び出したいクラスとメソッドを表すネイティブオブジェクトを検索し、引数をフォーマットし、適切なJNIEnv-> CallXXXメソッドを呼び出して、結果の値を処理する必要があります。

+0

ありがとう、それは働いています。 – johnkrishna

+0

私はもう一度打たれました。問題は、それが正常に動作していたJavaコールバックメソッドのパラメータとしてint型のようなプリミティブなデータ型を送信するときですが、Stringをパラメータとして送信すると致命的なerror.canが表示されます。 – johnkrishna

+0

JNIEXPORTはJNICALL Java_org_bel_MyJMSListenerAction_gsl_1stats_1all_1in_1one (JNIEnvの* ENV、jオブジェクトOBJ、jobjectArray ARR) {JCLASSのCLS = env-> GetObjectClassメソッド(OBJ)をjvoid。 jmethodID mid = env-> GetMethodID(cls、 "コールバック"、 "(Ljava/lang/String;)I"); printf( "IN Cネイティブ、コールバックメソッドを呼び出す前に\ n"); int t2 = env-> CallIntMethod(obj、mid、 "123"); //この文字列パラメータが問題を起こしています printf( "IN Cネイティブ、コールバックメソッドの呼び出し後\ n"); printf( "javaコールバックメソッドの後のt2値の出力:%d"、t2); } – johnkrishna

関連する問題