JNI 非 Java 类成员

发布于 2024-10-21 04:46:12 字数 480 浏览 1 评论 0原文

我想针对一些具有 C 接口的第三方库创建一个 Java 包装器。该库在一个复杂的 Context 实体上运行,该实体本质上是一个 C++ 对象(C++ 在该库内部使用,但 API 是纯 C 语言)。很自然地将这个实体包装到可通过 Java 访问的类中。为此,应该将指向 Context 的指针存储在某处。

我看到有两个选项可以做到这一点:

  • 在 java 端声明一个新成员(例如,只要长)并将其转换为 JNI 方法实现中的指针类型,
  • 以在 JNI 标头中声明一个新成员(如果 Java 依赖于javah 为我生成的结构的大小)

所有关于 JNI 的教程都太简单,无法给我提示如何使用 Java 类包装复杂的实体,任何有关更详细文档的链接都值得赞赏。

我还想知道在哪里调用上下文销毁函数(内部的C++析构函数)是合适的,我不想使用Java Finalize,因为Java不喜欢finalize方法,我认为有一种方法可以定义销毁过程在本机方面。

I want to create a Java wrapper against some third-party library with C interface. The library operates on a complex Context entity which is essentially a C++ object (C++ is used internally in that library, but API is in pure C). It would be natural to wrap this entity into a class accessible from Java. For that, a pointer to Context should be stored somewhere.

I see two options to do this:

  • to declare a new member on java side (as long, for example) and convert it to pointer type inside JNI methods implementation
  • to declare a new member in JNI header (That might be illegal if Java relies on the size of structure it gerenated for me by javah)

All the tutorials on JNI are too simple to give me a hint on how to wrap a complex entities with Java classes, any links on more verbose documentation are appreciated.

I also want to know where it is appropriate to call Context destruction function (C++ destructor inside) I don't want to use Java finalize for that as Java don't favor finalize methods and I supect there is a way to define a destruction procedure on native side.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文