gpt4 book ai didi

Java 类到 C 结构

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:13 24 4
gpt4 key购买 nike

我有两个来源:

  • 一个包含数百数据结构定义的 xml 文件,基本上是具有由简单数据类型(例如 intshort)组成的字段的结构, boolean, enum), 和
  • 包含相同数据结构的 c 头文件表示一个 c 结构。 (我不能修改这个头文件或 c 结构。)

我还有一个用 c 语言编写的库,它能够使用这些 c 结构来执行特定任务。

最后我有一个 Java 应用程序需要以某种方式使用这个库。

目前我从表示数据结构的 xml 文件生成 Java 类,现在我“只是”需要以某种方式将它们提供给库。

我目前的方法是生成 jni 代码,从 Java 中为每个结构调用一个 c 函数,接受 Java 生成的类作为参数。然后生成采用 Java 类的 C 代码,并在 C 结构中填写适当的字段。

这是一个好方法吗?有人对更简单的方法有建议吗?

我正在考虑使用套接字,例如protobuf ,但我认为这并不简单。

提前感谢您的任何建议。

最佳答案

我最终得到的解决方案是使用 Javolution struct library

基本上,我正在生成从 xml 继承 javolution.io.Struct 类的 Java 类,并适本地声明字段,以便 javolution 可以将其解释为结构。

这允许我执行 myJavaStructClass.getByteBuffer() 并获得 directly mapped byte buffer它具有与在 c 中声明的 Java“结构”相同的内存布局。并且因为它是直接映射的,所以包含一个可以通过 JNI 直接传递给 native 代码的引用。 .

Javolution 还支持压缩和非压缩结构,以及任意 endianness .

另一种解决方案是使用 SWIG直接从 c 头文件生成 Java 类,并通过 JNI 在 native 代码中直接管理它们.

关于Java 类到 C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6571283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com