我試圖在聲明JNI原生函數時使用函數重載。jni原生函數重載簽名
Java方法是:
公共本機靜態無效methodaaa(字符串類型,INT的errorCode); public native static void methodaaa(String type,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 mangling。
所以,我想:
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)。 –