从Java调用VB.NET函数的最佳方法?

时间:2013-06-27 15:12:34

标签: java .net vb.net dll integration

我是一家公司的软件开发人员。有一个用C#编写的客户端安装的软件程序,它在VB中都有dll - 都在.NET框架上。我们整个基于云的服务器都是用Java编写的,所以现在,我的任务就是调用Java中的一个函数来获取/设置一个私有(对不起,不太熟悉VB所以我可能使用这个术语不恰当)变量位于dll中。但最终,我的任务是从客户端程序收集数据并将其放入我们的服务器中。我过去几天一直在研究如何去做这件事,并找到了一些选择:

  • Java Native Access(JNA)
  • Java Native Interface(JNI)
  • COM / ActiveX桥(虽然我不能完全确定我知道这些是什么/如何使用它们_
  • JNBridge的

据我所知,这些是我分别找到的问题:

  • 使用此选项需要使用C或C ++从Java到.NET的中介,并且鉴于我只是真正了解Java,我真的不想在这个混乱中纠结。
  • 似乎比JNA复杂一点,我认为它无论如何都没有JNA的真正优势。他们似乎都需要C / C ++中介。
  • ......除了我不确定如何实施这种方法这一事实之外,真的不能说太多。
  • 这个和其他类似的桥梁必须是最后的手段。此产品的开发人员许可证非常昂贵,我确信他们没有资源来使用此产品。我可以尝试一下,但我真的不认为这是一个实习生的地方,要求公司投入这么多。

为了增加我不是那么擅长编程的事实,我一直专注于自己这样做,所以非常感谢提前阅读我的问题。如果有什么我没有完全解释,需要进一步解释,请告诉我!任何其他提示/指示将非常感激。

3 个答案:

答案 0 :(得分:0)

您可以将VB.NET公开为Web服务,以便在Java中使用...

答案 1 :(得分:0)

在这种情况下我永远不会使用webservices。 COM / ActiveX也会尽快被跳过以避免进一步的问题;)JNA / JNI听起来不错,但是你的路上有很多隐藏的东西。建议的JNBridge是个好主意,因为它使您可以专注于您的核心问题,并采用这种方法,您只需将所有互操作性(JNA / JNI)任务移交给第三方。

作为替代选项,我建议你检查一下名为Javonet的JNBridge的轻型对应物。它不需要代理生成或任何插件的安装。您只需获得一个JAR文件,即可打开您对任何自定义.NET DLL和.NET Framework开箱即用的访问权限,而无需在.NET端进行任何更改。

性能非常高,几乎是原生的,可能性覆盖了90%的情况,例如:使用任何.NET对象,方法,字段,数组,泛型,事件,异常,数据类型翻译等......

此外,此类网桥的价格/价值指数如此之高,以至于在您只有一个要读取的属性或一个要执行的方法之前,它将永远不会得到回报来启动自定义开发。否则我会选择第三方桥。

Javonet适用于任何.NET DLL,包括VB.NET,C#等。使用Javonet语法检查这个使用.NET的简短示例代码:

NObject yourObj = Javonet.New("Your.Namespace.YourDotNetClass");
yourObj.invoke("YourMethod","arg1",2);

正如您从JAVA端的Javonet API看到的那样,您获得了一个名为“NObject”的新对象,它是任何.NET对象的句柄类型,您可以在其上执行调用方法,获取/设置字段和您可以提供的参数等操作。 JAVA类型String,Integer,Float,它们将自动转换为.NET类型。

有关详细信息,请查看快速入门指南: http://www.javonet.com/#getting_started

答案 2 :(得分:0)

我可以和UnmanagedExports一起推荐JNA,因为它只需要带有以下标题的C#,VB.NET或F#.dll

C#:

[RGiesecke.DllExport.DllExport]
public static String yourFunction(String yourParameter)
{
    return "CSharp String";
}

之后,您可以像使用Java中的任何其他C或C ++ .dll一样使用JNA。您可以在我的答案中找到一个示例和一些限制:Call DLL from Java using JNA

我只用C#尝试过,但正如docu中所述,它应该适用于C#,F#和VB.NET。