从Java到C++的复杂数据
Complex data from Java to C++
晚安,
这是我在这里的第一篇帖子。
我正在进行集成,遇到了一些问题。
我正在尝试将一些结构化数据传递到Java<->C++使用JNI,但我遇到了一种情况。
想象一下这样的东西(尽管格式很难看)
Class Detail {
public int v1;
public long v2;
}
Class Info {
public int Number;
pubinc int Size;
public Detail InfoExtra[] = new Detail[ 3 ];
Info(){
InfoExtra[0] = new Detail();
InfoExtra[1] = new Detail();
InfoExtra[2] = new Detail();
InfoExtra[3] = new Detail();
}
}
我可以使用GetFieldID()/GetIntField()访问"Number"answers"Size"。
我的问题是当我尝试访问"InfoExtra"成员和您的属性时。
我可以使用找到"InfoExtra"
lfieldID = (env*)->GetFieldID( localClass, "InfoExtra", "[LInfoExtra;" )
但是,我不知道如何取回这个。我该怎么做?
致以最良好的问候Paulo
首先要做的是更改
public Detail InfoExtra[] = new Detail[ 3 ];
至
public Detail InfoExtra[] = new Detail[ 4 ];
以避免出现讨厌的ArrayIndexOfOutBounds异常。
现在,你的字段签名错了。生成签名的一种快速方法是以下命令:
javap -s p <ClassName>
对于InfoExtra,正确的签名是[LDetail;.
要访问阵列,您可以执行以下操作:
jclass clazz = (*env)->GetObjectClass(env,obj);
jfieldID infoExtra = (*env)->GetFieldID(env, clazz, "InfoExtra", "[LDetail;");
jobjectArray extras = (*env)->GetObjectField(env, clazz,infoExtra);
for (int i=0; i< ((*env)->GetArrayLength(env,extras)); i++) {
jobject element = (*env)->GetObjectArrayElement(env,extras,i);
//Do something with it, then release it
(*env)->DeleteLocalRef(env,element);
}
//Don't forget to release the array as well
(*env)->DeleteLocalRef(env,extras);
希望这能有所帮助!
相关文章:
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 来自复杂主机数据的阵列火力阵列
- printf 数据类型说明符复杂问题
- boost odeint 中的受控误差步进器是否支持复杂的数据类型?
- 有没有比具有多个维度的容器更好的解决方案来进行复杂的数据管理?
- 复杂数据类型向量的迭代器
- 将数据插入一些复杂的数据结构-C
- QT:使用QVariant任意复杂的数据结构
- 是否应该对复杂数据类型使用访问器
- 如何将复杂数据打包到 QtDBus 回复中
- 复杂C++数据类型和 COM
- googlemock - 模拟返回复杂数据类型的方法
- 在将复杂数据从主机传输到设备的简单 CUDA 代码中出现问题
- 从Java到C++的复杂数据
- 复杂数据类型的模板实例化问题
- 模板链表获取复杂数据类型的数据元素
- 何时使用 std::complex<long double> vs. 自己的复杂数据类型(结构等)
- 用于基元和复杂数据类型的C++模板析构函数