2014-02-22 58 views
0

我想從C中調用一個採用參數T extends Number的java方法。我知道java的默認完成了這些類型爲你自動裝箱,但是當我試圖通過一個floatjfloat在JNI調用,我得到以下錯誤:簡單的方法在JNI中從原語中獲取數字?

FATAL ERROR in native method: Bad JNI oop argument 

有沒有一種簡單的方法來生成Number Java類或將它傳遞給C使用JNI的Java方法參數,而不關心實際的原始類型?

回答

0

鑑於Java類

class CC { 
    static void callbackMethod(Number number) { 
     Log.i("callbackMethod", "arg = " + number); 
    } 
} 

您可以使用native.c

#include <jni.h> 

jclass floatClass = (*env)->FindClass(env, "java/lang/Float"); 
jmethodID floatConstructor = (*env)->GetMethodID(env, floatClass, "<init>", "(F)V"); 
jobject floatObj = (*env)->NewObject(env, floatClass, floatConstructor, (jfloat)1.23); 

jclass callbackClass = (*env)->FindClass(env, "CC"); 
jmethodID callback = (*env)->GetMethodID(env, callbackClass, "callbackMethod", "(java/lang/Object)V"); 
(*env)->CallVoidMethod(env, callbackClass, callback, floatObj); 
+0

我提高了我的問題,但我真的很希望有這樣做,而不必調用特定類的方法,像「浮動」。 – Nicholas

+0

唉,答案是否定的。 –

+0

你不可能讀到我的想法:(我正在做你到目前爲止提出的建議,但我希望獲得更多的Number中立實現。 – Nicholas

相關問題