繁体   English   中英

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

[英]Best way to call VB.NET function from Java?

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

  • Java本机访问(JNA)
  • Java本机接口(JNI)
  • COM / ActiveX桥接器(尽管我不能完全肯定地说我知道这些是什么/如何使用它们_
  • JNBridge

现在,据我所知,分别是我发现的每个问题:

  • 使用此选项需要使用C或C ++从Java到.NET的中介,并且鉴于我只真正了解Java,所以我真的不想纠结于此。
  • 似乎比JNA稍微复杂一点,但我认为它与JNA相比并没有真正的优势。 他们俩似乎都需要C / C ++中介。
  • 除了我不确定如何实现该方法外,我不能说太多。
  • 这座桥梁和其他类似的桥梁必须是不得已的选择。 该产品的开发者许可证价格昂贵,我确定他们没有资源来使用此产品。 我可以尝试询问,但我真的不认为可以要求公司进行大量投资来代替实习生。

除了我不是真正擅长编程的事实外,我还剩下大部分工作要靠我自己完成,因此非常感谢您阅读我的问题。 如果我没有完全解释需要进一步解释的内容,请告诉我! 任何其他提示/指针将不胜感激。

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

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

作为替代选择,我建议您检查名为Javonet的JNBridge的轻型对等件。 它不需要代理生成或安装任何插件。 您仅获得一个JAR文件,可以直接使用它打开对任何自定义.NET DLL和.NET Framework的访问,而.NET方面没有任何更改。

性能非常高,几乎是本机的,并且可以覆盖90%的情况,例如:使用任何.NET对象,方法,字段,数组,泛型,事件,异常,数据类型转换等...

此外,此类桥的价格/价值指数非常高,以至于您只有一个属性要读取或要执行一种方法之前,就无法开始定制开发。 否则我会选择第三方桥接器。

Javonet可与任何.NET DLL一起使用,包括VB.NET,C#等。请使用Javonet语法从JAVA中使用.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

我可以将JNA与UnmanagedExports一起使用,因为它只需要C#,VB.NET或F#.dll,并且具有以下标头

C#:

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

之后,您可以像使用Java中的任何其他C或C ++ .dll一样,通过JNA使用它。 您可以找到一个示例和一些类似的问题我无法解决的限制: 使用JNA从Java调用DLL

我仅使用C#进行了尝试,但是如文档中所述,它应可用于C#,F#和VB.NET。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM