【发布时间】:2009-10-15 09:08:52
【问题描述】:
我有一个大型 C 结构(大约 40 个成员,int 和 char[]),我必须通过 JNI 将其传递到 Java 端进行进一步处理。这种情况反复发生。 (我已经将GetMethodID() 等放入C 端的init() 函数中,所以我只需调用它们一次。)
什么是执行此操作的有效方法?
我能想到:
- 通过
GetMethodID( ..., "<init>", ... )用适当的成员实例化Java 类,并通过构造函数传递C 结构的所有成员; - 为 Java 结构分配适当的成员,并通过
SetXYZField()初始化(公共)成员; - ...
我是否忽略了什么? (这是我与 JNI 的第一次“近距离战斗”。)真的没有有效的方法来“同步”一个 C 结构和一个 Java 结构吗?
什么是更有效的传递方法,1. 还是 2.?如果是1.,我应该通过CallXYZMethod()(参数列表)还是CallXYZMethodA()(参数数组)传递构造函数参数?
感谢您的意见。
编辑:稍作改写; 2.当然不需要是类,如果Java端有其他处理C数据的解决方案,我也不需要Java端的struct。
编辑 2: 我在 C++ 中执行此操作,但结构本身源于 C 链接回调函数,即没有特定于 C++ 的问题。改写为“C”而不是“C++”。
【问题讨论】:
标签: java c java-native-interface