2014-02-22 30 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

相关问题