JNI 可以与 c/c++/objective c 以外的其他语言交互吗

Can JNI Interact with other languages than c/c++/objective c

我想知道,如标题所示: 我可以使用 JNI 将 java 代码与 c/c++/objective c、 直接 以外的语言桥接吗?

例如,如果我想在我的 java 代码中使用 Csharp, 我是否必须通过调用 c/c++ 方法并从那里以某种方式调用 csharp 方法来以标准方式使用 JNI?

或者有没有一种方法可以使用 JNI 直接调用 Csharp 代码(这意味着它会有一些类似于在 c/c++ 中实现 jni.h 的库)?

我不是在寻找有关如何桥接的其他解决方案 java/Csharp,只是想知道 JNI 是否可行。

据我所知,没有直接的方法。但是有间接的,即 JNA 而不是直接的 JNI。

关键是 JNI 需要(至少)一个专门用于处理 JNI 参数传递的方法(通常是几个方法),并且需要 C 链接(即使是用 C++ 或什至 csharp 编写的,如果你设法做到了)。

JNA 将是一种提供这种胶合逻辑的方法(它类似于 .net 中的 PINVOKE),但它是一种间接方法。您需要加载例如一个用 csharp 编写的库或设法将 csharp 代码传递给解释器(以某种方式)并获得结果,也许您编写的 csharp 库可以做到这一点,制作一个 jni 桥,它公开了一些功能,允许您上传 csharp 脚本将通过 .net 解释器执行,您将通过 jni 传回结果。

我记得使用支持 COM 的 JNI 桥,您可以使用 COM 与(某些)用任何语言编写的库进行交互,但话又说回来,这会增加另一层间接。祝你好运!