如何在Java中使用.Net dll

我在vb.net中创建了dll。 我如何在JAVA中使用它的function。

我在google上搜索时发现了一些JNI,但没有得到它。 是否有任何简单的文档与示例。

我建议Java Native Access(JNA)比使用JNI更容易。 假设你有一个带有一些函数的DLL,

  • 创建一个java接口,它具有 DLL中的函数相同的方法签名

例如

public interface NativeExample{ public int method1(String param1); public boolean mehthod2(); } 
  • 以下是加载DLL的方式(假设其名称为NativeLib.dll)

    NativeExample nativeExample= (NativeExample) Native.loadLibrary("NativeLib", NativeExample.class);

一旦你有了这个,你可以通过java方法从DLL调用该方法。

 `nativeExample.method("test");` `nativeExample.method2();` 

有关Java和Native之间数据类型的映射,请参阅上面的链接。

这是另一个例子 。

好吧,有第三方工具/库可以帮助您将Java连接到.NET。 如果你想自己做 – 意思是自己实现JNI包装器 – 你实际上需要实现2套包装器。

JNI将使您进入C / C ++,不允许直接访问.NET对象。 此时,您可以实现另一个包装器,一个只有静态方法的.NET对象,您的C / C ++包装器可以调用它。 由于非托管C / C ++代码不能拥有.NET对象,因此它只能调用.NET类的静态方法。

除非你在这方面做了很多工作,否则JNI肯定不会直接访问.NET。 您可以构建自己的包装器并使用C / C ++作为中间件,但对于小型项目,它永远不会得到回报。 请记住,调用方法是一回事,但是以适当的类型传递参数,检索结果,订阅事件等等……等等。

因此,我还建议检查为这种情况做好充分准备的第三方工具。

首先检查至少这两个:

  • Javonet
  • JNBridge的

Javonet我会推荐所有小型和快速的项目,因为这是一个轻量级的解决方案,由于进程通信提供了非常高的性能,并且所有后台工作都适合您。 您只需要调用“AddReference(your.dll)”,然后使用reflection式API调用任何方法。 您可以调用任何方法,设置/获取字段和属性,获取结果,订阅事件或处理exception。

非常类似的方式适用于JNBridge,它为云集成或websphere等流行的企业场景提供了更多的额外人员/扩展但是我建议更大的项目,你希望在不同的机器上桥接java和.net它更强大但更多既复杂又沉重。

两者都可以免费试用,Javonet可以免费用于非商业和学术用途,因此请尝试,测试并选择最适合您需求的产品。