Java 虚拟机与 CLR 之间的互操作性






2.84/5 (12投票s)
借助IKVM,您可以直接在Microsoft .NET或Mono上运行编译后的Java代码(字节码)。字节码会被动态转换为CIL并执行。
引言
IKVM.NET是Mono和Microsoft .NET Framework的Java实现。IKVM是自由软件,根据宽松的自由软件许可协议分发。
IKVM包含以下组件:
- 在.NET中实现的Java虚拟机
- .NET实现的Java类库
- 实现Java和.NET互操作性的工具
借助IKVM,您可以直接在Microsoft .NET或Mono上运行编译后的Java代码(字节码)。字节码会被动态转换为CIL并执行。
使用IKVM
步骤1:编写一个Java类,例如dllClass.java。
// File 'dllClass.java':
public class dllClass
{
public static String foo() {
return("STPL Inc");
}
public static int add(int a, int b)
{
int sum = a + b;
return sum;
}
public static int Mult(int a, int b)
{
int mul = a * b;
return mul;
}
}
步骤2:编译它以获取类文件dllClass.class。
javac dllClass.java
步骤3:再次,将其转换为jar文件dllClass.jar。
jar cf dllClass.jar dllClass.class
步骤4:现在,复制jar文件并将其复制到IKVM/bin。
步骤5:打开命令提示符,并进入IKVM/bin。
步骤6:输入IKVM并按Enter键。

步骤7:现在,使用以下命令将jar文件转换为DLL:
Ikvmc dllClass.jar
现在我们将得到dllClass.dll文件。
步骤8:将IKVM DLL和dllClass.dll复制到应用程序的bin目录。
步骤9:添加对IKVM.OpenJDK.ClassLibrary.dll和dllClass.dll的引用。
步骤10:现在,您可以在C#代码中使用此DLL
private void addbtn_Click(object sender, EventArgs e)
{
int a = dllClass.add(Convert.ToInt32(textBox1.Text),
Convert.ToInt32(textBox2.Text));
lblRs.Text = "Sum of " + textBox1.Text +
" and " + textBox2.Text+" = "+a;
}
private void button1_Click(object sender, EventArgs e)
{
int add = dllClass.Mult(Convert.ToInt32(textBox1.Text),
Convert.ToInt32(textBox2.Text));
lblRs.Text = "Multi. of " + textBox1.Text + " and " +
textBox2.Text + " = " + add;
}
private void button2_Click(object sender, EventArgs e)
{
string a = dllClass.foo();
lblRs.Text = a;
}
结果截图

历史
- 2008年12月30日:初始发布
- 2009年1月6日:添加了文章的源代码和图片