JNIネイティブ関数を宣言するときに関数オーバーロードを使用しようとしています。jniネイティブ関数オーバーロードシグニチャ
Javaメソッドは次のとおりです。
公共ネイティブの静的な無効methodaaa(文字列型、int型のerrorCode)。 public static final void methodaaa(String型、byte [] byts);
は、過負荷がなければ、コードは以下の通りです:
JNIEXPORT void JNICALL Java_com_xxx_yyy_JavaCallCpp_methodaaa(JNIEnv* env, jobject thiz, jstring type, jint errorCode){}
そして、これはうまく動作します。
は、それから私は、オーバーロードを追加しようとしました:
JNIEXPORT void JNICALL Java_com_xxx_yyy_JavaCallCpp_methodaaa(JNIEnv* env, jobject thiz, jstring type, jint errorCode){}
JNIEXPORT void JNICALL Java_com_xxx_yyy_JavaCallCpp_methodaaa(JNIEnv* env, jobject thiz, jstring type, jbyteArray buffer){}
そして、これは私にエラーを与える:
conflicting types for Java_com_xxx_yyy_JavaCallCpp_methodaaa
その後、私はいくつかの研究を行なったし、私は「__」を追加する必要があるようにそれはそう私がオーバーロードしたい関数の終わりに引数nameを追加します。
は、だから私が試した:
JNIEXPORT void JNICALL Java_com_xxx_yyy_JavaCallCpp_methodaaa__Ljava_lang_String_I(JNIEnv* env, jobject thiz, jstring type, jint errorCode){}
JNIEXPORT void JNICALL Java_com_xxx_yyy_JavaCallCpp_methodaaa__Ljava_lang_String_B(JNIEnv* env, jobject thiz, jstring type, jbyteArray buffer){}
しかし、それはまだ動作しない、エラーは次のとおりです。
No implementation found for native Lcom/xxx/yyy/JavaCallCpp;.methodaaa:(Ljava/lang/String;I)V
誰もがどのようにパラメータまたはどのようJSTRINGとJNICALL関数名を書くためにことを知っているです私はここで間違っていますか?
何かアドバイスが理解されるであろう、
更新:)感謝:
は、私はここのリンクが見つかりました:
http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/design.html
をして、自分のコードを修正しようとしました:
JNIEXPORT void JNICALL Java_com_xxx_yyy_JavaCallCpp_methodaaa__Ljava_lang_String_2I(JNIEnv* env, jobject thiz, jstring type, jint errorCode){}
JNIEXPORT void JNICALL Java_com_xxx_yyy_JavaCallCpp_methodaaa__Ljava_lang_String_2B(JNIEnv* env, jobject thiz, jstring type, jbyteArray buffer){}
でも、私は同じエラーが発生しています:
No implementation found for native Lcom/xxx/yyy/JavaCallCpp;.methodaaa:(Ljava/lang/String;I)V
'Ljava_lang_String_2B'は' Ljava/lang/String; B'です。あなたは 'Ljava/lang/String;を持っているので[B''Ljava_lang_String_2_3B'が必要です。 – Michael
Java関数の宣言を表示してください。それから、私たちは@EJP [言う](http://stackoverflow.com/a/40814674/2226988)をします。 –