2017-03-07 2 views
0

を失敗し、なぜ私が持って理解していません。ここで私はそれをやろうとしています方法です:はJNIEnv-> GetFieldID Javaで

JNIEXPORT jobject JNICALL 
Java_com_mypkg_utils_attitude_1calculator_R(JNIEnv *jenv, 
              jobject jobj) 
{ 
    myns::AttitudeCalculator *nobj = nullptr; 
    jlong addr = 0; 
    jfieldID jfid = 0; 
    jclass jcls; 

    jcls = jenv->GetObjectClass(jobj); 
    jfid = jenv->GetFieldID(jcls, "native_ptr_", 
    "Lcom/mypkg/utils/attitude_calculator$native_ptr_;"); 
    if (jfid == nullptr || jfid == NULL) { 
    ... 
    } 
    ... 
} 

java.lang.NoSuchFieldErrorの中GetFieldID結果を呼び出します。

GetFieldIDを呼び出す正しい方法は何ですか?

答えて

1

native_ptr_は、それゆえ、その署名は"J"ある、ない"Lcom/mypkg/utils/attitude_calculator$native_ptr_;"longあります。

だから、呼び出しは次のようになります。ドキュメントにこれらの文字列が記載されています

jfid = jenv->GetFieldID(jcls, "native_ptr_", "J"); 
+0

?参照として持っているといいですね。本当に重要でない限り、私は将来尋ねる必要はありません。 –

+1

http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html **タイプシグネチャ**までスクロールします。 – Michael

+0

ありがとうございます。 –