0

有没有办法从 JNI 调用 STL 库,我相信 JNI 为本地调用提供了类似 C 的接口,我们如何为 C++ 模板库实现这一点?

4

4 回答 4

2

我同意,如果您只是在寻找普通的 STL,您可能可以改用 Java 库。但是,如果您坚持包装 STL,SWIG 会在 JNI 中提供一些开箱即用的 STL 包装(请参阅了解基本机制),这应该会生成相对稳定、经过测试的代码。

于 2009-04-21T08:07:09.350 回答
0

我知道这是可能的,虽然我自己没有做过。但是如果你不是很小心的话,JNI 代码可能会导致 JVM 崩溃。此外,JNI 代码比 Java 代码更难维护。我在一个项目中,Java -> JNI -> STL 和 COM 代码被丢弃,我们用 C# 替换它,访问相同的 STL 和 COM 以及一个套接字。我们从未回头。

如果你只做少量的 JNI,那可能是值得的。如果您通过 JNI 创建大型接口,我强烈建议您改用 C# 而不是 Java 编写与 STL 交互的组件,并使用套接字在 C# 和 Java 组件之间进行通信。它将容易编写、测试和维护。

于 2009-04-21T04:20:28.383 回答
0

我不得不问为什么你觉得有必要使用 Java 中的 STL 库。它们中是否有 Java 自己的大量库没有提供的东西?

我理解为什么你必须调用你自己的代码(我假设你已经分析了 Java 代码并发现它需要,否则你的努力就白费了)但你似乎在问如何直接调用 STL 的东西。

我们经常在使用 JNI 时遇到问题,它使我们的代码的可移植性降低,因此您必须有充分的理由想要在我们的商店中使用它,并且您必须用硬数据证明为什么 Java 提供的东西是不够。

于 2009-04-21T04:25:07.513 回答
0

是的。您需要使用 swig 类型映射将 C++ STL 类转换为 Java 对象......反之亦然。欲了解更多信息,请访问 http://www.swig.org/Doc2.0/Android.html

于 2017-05-07T12:01:16.780 回答