0

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

  • Java 本机访问 (JNA)
  • Java 本机接口 (JNI)
  • COM/ActiveX 桥(虽然我不能完全确定我知道这些是什么/如何使用它们_
  • 江桥

现在据我所知,这些是我分别发现的问题:

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

再加上我不是很擅长编程这一事实,我大部分时间都是自己做这件事,所以提前非常感谢您阅读我的问题。如果有什么我没有完全解释清楚需要进一步解释,请告诉我!任何其他提示/指针将不胜感激。

4

3 回答 3

0

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

作为替代选项,我建议您检查 JNBridge 的轻型对应物,称为 Javonet。它不需要代理生成或安装任何插件。您只需获得一个 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 类型字符串提供、Integer、Float 并且它们会被自动翻译成.NET 类型。

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

于 2013-10-28T12:31:41.043 回答
0

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

于 2013-06-27T15:18:34.927 回答
0

我可以将 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 使用它。您可以在类似问题的回答中找到一个示例和一些我无法解决的限制:Call DLL from Java using JNA

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

于 2014-04-10T07:26:43.793 回答