Java JNI: c++中原始(双精度)数组集合中的错误值
Java JNI: Bad values in primitive (double) array set within C++
我试图从c++代码中设置Java对象的原始双数组字段。Java对象定义为:
public class EmitterTrack {
public int trackNumber;
public long lastUpdatedTime;
public int associatedEmitterModeTrackNumber;
public EmitterObservationStruct updatedEmitterObservation;
public double[] emitterTypeProbabilities;
public EmitterTrack() {
emitterTypeProbabilities = new double[9];
updatedEmitterObservation = new EmitterObservationStruct();
}
}
创建一个新的EmitterTrack对象并尝试设置双数组的c++代码如下:
void sendEmitterTracksToJava(jclass javaEmitterTrackClass, JNIEnv *jniEnv, EmitterTrack emitterTrack) {
jmethodID ctor = jniEnv->GetMethodID(javaEmitterTrackClass, "<init>", "()V");
jobject javaEmitterTrack = jniEnv->NewObject(javaEmitterTrackClass, ctor, NULL);
jfieldID fid = jniEnv->GetFieldID(javaEmitterTrackClass, "emitterTypeProbabilities", "[D");
jintArray jary;
jary = (jintArray)jniEnv->GetObjectField(javaEmitterTrack, fid);
jint *intArray = jniEnv->GetIntArrayElements(jary, 0);
for (j = 0; j < 9; j++) {
intArray[j] = emitterTrack.emitterTypeProbabilities[j];
}
jniEnv->ReleaseIntArrayElements(jary, intArray, 0);
}
当我将Java发射器跟踪对象传递回Java时,我看到这样的输出:
Emitter Track:
emitterTypeProbabilities[0]: 2.12199579097E-313
emitterTypeProbabilities[1]: 6.3659873739E-313
emitterTypeProbabilities[2]: 1.06099789568E-312
emitterTypeProbabilities[3]: 1.48539705397E-312
emitterTypeProbabilities[4]: 3.95E-322
emitterTypeProbabilities[5]: 0.0
emitterTypeProbabilities[6]: 0.0
emitterTypeProbabilities[7]: 0.0
emitterTypeProbabilities[8]: 0.0
有没有什么我做错了,只是我没有看到?
Sir RoTN成功了!我愚蠢地使用jintArray和获取/释放int数组,而不是double。用以下代码替换可以修复一切:
jdoubleArray jary;
jary = (jdoubleArray)jniEnv->GetObjectField(javaEmitterTrack, fid);
jdouble *doubleArray = jniEnv->GetDoubleArrayElements(jary, 0);
for (j = 0; j < 9; j++) {
doubleArray[j] = emitterTrack.emitterTypeProbabilities[j];
}
jniEnv->ReleaseDoubleArrayElements(jary, doubleArray, 0);
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 我们可以将集合的值存储在变量中吗?就像我们可以将数组的值存储在变量中一样
- C++中的集合(异构类型的数组)
- C 集合构建器中类成员数组的2D数组大小
- 只有Arduino的第一个对象在包含在另一个对象的集合/数组中时会丢失其数据属性值
- 如何将数组插入无序集合
- 支持多线程方法来构建数组中所有元素的集合吗
- 在c++中使用集合与使用数组
- 如何查找数组集合中第二大元素的索引
- c++(98) STL是否可以设置对int类型的数组进行散列,然后检查该数组是否存在于集合中?
- Java JNI: c++中原始(双精度)数组集合中的错误值
- Visual Studio - 如何在 MS 编译器中使用数组初始化C++向量/集合
- 将文本文件转换为 std::string 数组/集合的最佳方法是什么 C++.
- 创建集合关联数组