gpt4 book ai didi

java - 最好的选择。在 Java 应用程序中使用 .Net Dll

转载 作者:行者123 更新时间:2023-12-01 17:30:55 24 4
gpt4 key购买 nike

我知道三个与此有关的问题,但我还没有找到确切的答复。我们有一个没有依赖项或 p/Invoke 的 .Net dll (C#)。所以它是一个完整的.net 平台库。我们的一位客户希望在 Java 应用程序中使用它。

最好的选择是什么?我一直在寻找 jni4net 这可能是一个完美的解决方案,但它似乎不支持 .Net 中的泛型(我们的 dll 使用大量泛型字典和集合)

JNA 是最好的选择吗?

提前致谢

最佳答案

几年前我也遇到过类似的问题。我有一个用Delphi编写的dll。 (Delphi 是 Borland 销售的基于 Pascal 的 Windows 应用程序开发工具。)我需要从 Java 调用 dll,但某些 dll 函数的参数和返回类型与 Java 不兼容。 (顺便说一句,尽管无关紧要,但有趣的是,Anders Hejlsberg 为 Microsoft 发明了 C#,也为 Borland 发明了 Delphi。)以下是我解决问题的方法。

1) 我确实使用了 jni 来允许我的 Java 代码调用 dll。

2) 我在 Delphi 中编写了一个薄包装 dll,它是我的 Java jni 代码调用的实际 dll。对于那些完全兼容Java的函数,包装dll只是充当一个pass,直接调用实际的dll函数并返回返回值。对于那些不兼容的函数,包装器dll定义了与Java兼容的相应方法,并在调用实际的dll之前从Java到Delphi进行了适当的转换。

3) 我还在 jni 调用上方编写了一个薄包装对象。同样,在大多数情况下,java 包装器直接对 Java 和 Delphi 之间完全兼容的那些函数进行 jni 调用。然而,就我而言,一些函数要求我传入 Delphi 对象。所以,我所做的就是定义相应的Java对象。我的 Java 包装器对象的主要目的是获取这些 Java 对象,将它们转换为与我的 Delphi 包装器 dll 兼容的参数,然后进行适当的 jni 调用。另外,对于那些传回对象的 dll 函数,我的 java 包装器从 jni 调用中获取与 java 兼容的返回值,并创建并组装了适当的对象。

这听起来可能需要大量工作,但实际上并非如此(我的 dll 有超过 100 个方法,以及十几个左右的 Delphi 对象类型)。当我完成后,编写实际使用 dll 的 Java 应用程序代码非常简单。

关于泛型,这可能是一个问题。但是,如果在现实生活中,您支持的对象类型数量相对较少(而且通常如此),您可以在包装器中为每个对象类型编写单独的调用。 (这就是我们这些记得 Java 2 的人在发明泛型之前所做的事情,而且它工作得很好,即使它有点不太优雅。)您的应用程序 Java 代码仍然可以使用泛型;包装器将根据传入的实际类型进行适当的调用。

希望这会给您一些如何继续进行的想法。

关于java - 最好的选择。在 Java 应用程序中使用 .Net Dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11050746/

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