我有一个在vb.net中创建的dll文件。 如何在JAVA中使用它的函数。
我在谷歌上搜索时发现了JNI,但是无法理解。 请问是否有带示例的简单文档。
我有一个在vb.net中创建的dll文件。 如何在JAVA中使用它的函数。
我在谷歌上搜索时发现了JNI,但是无法理解。 请问是否有带示例的简单文档。
我建议使用 Java Native Access (JNA),因为它比使用 JNI 更容易。假设您有一个包含一些函数的 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之间数据类型的映射,请参考上面的链接。
这里是另一个示例。
com.sun.jna.Native
。请参考答案中的维基百科链接。 - Santosh如果没有大量的工作,JNI将不会直接让你访问.NET。你可以构建自己的包装器并使用C/C++作为中间件,但对于小型项目来说,这将永远得不偿失。记住,调用方法只是一方面,正确类型地传递参数,检索结果,订阅事件等等都是更加重要的事情。
因此,我建议您查找第三方工具,这些工具已经很好地准备了这些场景。
首先至少检查这两个:
对于所有小型和快速项目,我会推荐使用Javonet,因为它是一种轻量级解决方案,由于在进程通信中提供非常高的性能,并且为您完成所有后台工作。您需要做的就是调用 "AddReference(your.dll)",然后使用类似反射的API调用任何方法。您可以调用任何方法、设置/获取字段和属性、获取结果、订阅事件或处理异常。
JNBridge的工作方式非常相似,但是它有更多用于流行企业场景(如云集成或WebSphere)的附加组件/扩展,但这一点更适合于需要在单独的计算机上桥接Java和.NET的较大项目。它更强大,但也更复杂和重量级。
两者都可以免费试用,而Javonet可以免费用于非商业和学术使用,因此请尝试、测试并选择最符合您要求的工具。
嗯,有第三方工具/库可以帮助您将Java连接到.NET。如果您想自己实现JNI包装器,则实际上需要实现2组包装器。
JNI将使您进入C/C++,但是不允许直接访问.NET对象。在那时,您可以实现另一个包装器,即仅具有静态方法的.NET对象,您的C/C++包装器可以调用该对象。由于非托管的C/C++代码无法拥有.NET对象,因此它只能调用.NET类的静态方法。