3

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

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

4

3 回答 3

6

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

这里还有一个例子

于 2013-05-09T12:06:05.893 回答
2

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

因此,我还建议检查为此类场景做好充分准备的第三方工具。

首先至少检查以下两项:

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

JNBridge 的工作方式非常相似,它为流行的企业场景(如云集成或 websphere)提供了更多的额外人员/扩展,但如果您希望在不同的机器上桥接 java 和 .net,我会推荐这个用于更大的项目,它更强大但更多复杂而沉重。

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

于 2013-06-19T22:20:08.073 回答
0

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

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

于 2013-05-09T11:42:42.760 回答