如何在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可以免费用于非商业和学术用途,因此请尝试,测试并选择最适合您需求的产品。