【问题标题】:Can JNI Interact with other languages than c/c++/objective cJNI可以和c/c++/objective c以外的其他语言交互吗
【发布时间】:2015-01-08 05:17:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# java-native-interface programming-languages


    【解决方案1】:

    AFAIK,没有直接的方法。但是有间接的,即 JNA 而不是直接的 JNI。

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

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

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

    【讨论】:

    • 您好,Alexandre,感谢您的回答。 JNA 似乎是一个不错的选择,我刚开始阅读它,可能会重新考虑在我从事的另一个项目中使用 JNA 而不是 JNI 进行重构,该项目使用了来自 java 的 c++ 代码。无论如何,关于 csharp,你听说过 jni4net 吗? jni4net.com/index.html c-sharpcorner.com/UploadFile/ajyadav123/… 这似乎是一个很好的解决方案,但我刚刚读到它
    • 我还没有听说过那个。它似乎是一个非常专业的解决方案,可以完全按照您的意愿行事,并且具有双向的额外附录,例如您可以调用 csharp 代码,而 csharp 代码又可以回调 java 代码。如果您决定使用它,我建议您为主要功能制作一系列小测试用例,因为实现不完整的可能性很小。但似乎值得一试。最好的问候
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2019-07-31
    • 2011-11-14
    • 2014-02-24
    • 2011-02-19
    相关资源
    最近更新 更多