我们可以在VB.net程序中使用Java库吗?

时间:2020-03-06 14:55:16  来源:igfitidea点击:

我想知道是否可以从VB.net应用程序调用Java库。

(Google搜索显示出很多不可靠的答案,但没有确定的答案)

解决方案

不,你不能。除非我们愿意使用某些" J#"库(与Java几乎不一样)或者IKVM(它是在.NET之上运行的Java实现),但正如其文档所述:

IKVM.OpenJDK.ClassLibrary.dll: compiled version of the Java class libraries derived from the OpenJDK class library with some parts filled in with code from GNU Classpath and IcedTea, plus some additional IKVM.NET specific code.

所以这不是真正的交易。

开箱即用。

我知道大多数Java / .net互操作都使用Web服务。

如果可以使用Java创建COM组件,则可以使用tlbimp创建要在VB.Net中使用的互操作程序集。

如果可以创建可用于Java的C ++的标准DLL,则可以编写P / Invoke声明并从VB.Net调用它们。

如果可以使用Java创建Web服务,则可以从WSDL生成代理类并从VB.Net调用它。

在任何情况下,Java组件都有可能存在于单独的进程中。我怀疑我们是否可以在同一过程中加载Java VM和CLR。

如果我们拥有源代码并使用Jcompiler进行编译,那么答案是肯定的。如果要调用Java 2之前的任何版本(也称为1.2)的库,则J#几乎逐字包含了这些库。不过,最近的资料会比较棘手(即不存在)。

yWorks的yFiles图形布局算法就是在商业上使用的示例。这些最初只是Java库,但是在过去的几年中,他们一直在提供.NET版本,这只是使用Visual J#编译的Java版本。

这并非没有问题,并且有一些无法克服的限制,但是可以做到。所以...不幸的是,这个答案看起来也很阴暗。

如果以某种形式包装Java以使其可访问,则可以从.NET调用Java,最简单的方法通常是使用运行时桥,例如

http://www.jnbridge.com/

另一种方法是使用Java webservices包装API。

还要检查此http://www.devx.com/interop/Article/19945

我们可以使用JNI实例化虚拟机,然后使用Java类。但是,这会很有趣,因为我们需要使用C ++作为VB.Net和Java之间的桥梁。

Java世界中的这篇文章提供了有关如何从C ++使用Java的快速教程,反之亦然。

http://www.javaworld.com/javaworld/javatips/jw-javatip17.html

如果有源代码,Visual Studio将允许我们将Java代码转换为c#。

我是jni4net的作者,jni4net是JVM和CLR之间的开源进程内桥梁。它建立在JNI和PInvoke之上。无需C / C ++代码。希望对我们有帮助。