从 JNI 中的原语获取数字的简单方法
Easy way to get Number from primitive in JNI?
我想从 C 调用一个接受参数T extends Number
的 java 方法。我知道java默认为您执行这些类型的自动装箱,但是当我尝试在JNI调用中传递float
或jfloat
时,出现以下错误:
FATAL ERROR in native method: Bad JNI oop argument
有没有一种简单的方法来生成一个Number
的java类或使用JNI将其传递给C的Java方法参数,而不关心实际的基元类型?
给定的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);
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 在c++中用vector填充一个简单的动态数组
- 将一系列数字映射到 CPP 中的值的简单方法
- 具有检查功能的简单数字生成器,以避免重复
- 有没有更简单的方法可以从用户那里获取三个数字并按升序打印它们?
- 引发未经处理的异常:简单 C++ 程序中的读取访问冲突,动态增加数组长度以存储数字
- 仅使用关键字和数字提取来解析简单语法
- 从 JNI 中的原语获取数字的简单方法
- 一个简单的程序,对数字进行计数和求和.我怎样才能让它工作
- 无法在 CUDA 中找到 1 到 100 个数字的简单总和
- 如何用C++的简单句子计算单词和数字
- 使用Qt和QThread的简单数字时钟
- 简单的程序可以判断数字是偶数还是奇数,负片都显示为偶数
- 一个使用6位数字的简单程序
- 简单的数字猜游戏.c++
- 解引用简单数字时的奇怪输出
- 如何在c++中优化一个简单的数字类型包装器类
- 在循环C++中添加简单数字