如何在Java中使用.Net dll

时间:2013-05-09 11:38:45

标签: java vb.net dll java-native-interface

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

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

3 个答案:

答案 0 :(得分:4)

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

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

例如

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之间数据类型的映射,请参阅上面的链接。

这是one more example

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

首先至少检查这两个:

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

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

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