2016-05-19 6 views
1

JNI署名

name引数は、完全修飾クラス名または配列型 署名です。例えば、 java.lang.Stringクラスの完全修飾クラス名は次のとおりです。 「のjava/LANG /文字列」

私の質問は、Java初心者の質問、にISNクラスの署名は何でありますパッケージ化されていませんか?

+0

System.out.println(instanceOfYourClass.getClass().getName()); 
から印刷することができます。あなたはすぐにそれを理解しようと考えるべきではありません。 – EJP

答えて

0

YourClassがデフォルトパッケージのクラスである場合、完全修飾名は単純にYourClassです。

Javaメソッドが

public void method(YourClass x); 

は、あなたが経由でメソッドを検索することができている場合:あなたはメソッドのシグネチャを見ることができます* .hファイルを生成することがあり

jmethodID m = (*env)->GetMethodID(env, javaclass, "method", "(LYourClass;)V"); 

ツールjavah

完全修飾名は、容易何かのJNI署名が `javah`ツールの出力ごとにされているJava

+0

ありがとうございます。私は質問の束を持っています、それは別の型のオブジェクトフィールドからメソッドにアクセスするためのものです、それは動作しますか? "V"の意味は何ですか?私は別の種類の署名( "V"と括弧なし)が他にもあるか、JNIの古いバージョンの署名であると思っていますか? –

+0

'(LYourClass;)Vは、YourClass型の1つのパラメータを持ち、voidを返すメソッドのシグネチャです。例は '(B)I'です - intを返すパラメータbooleanを持つメソッドです。 //stackoverflow.com/questions/30815284 –

+0

を参照してください。オブジェクトのパラメータにアクセスしたいが、メソッドではなく、 'jfieldID fid =(* env) - > GetFieldID(env、myClass、" theField " 、 "LClassname"); '続いて' jobject myObj =(* env) - > GetObjectField(env、jobjectContainer、fid); 'は動作しますか? –