65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.84/5 (12投票s)

2008年12月30日

CPOL

1分钟阅读

viewsIcon

38381

downloadIcon

269

借助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键。

IKVM.JPG

步骤7:现在,使用以下命令将jar文件转换为DLL:

Ikvmc dllClass.jar

现在我们将得到dllClass.dll文件。

步骤8:将IKVM DLL和dllClass.dll复制到应用程序的bin目录。

步骤9:添加对IKVM.OpenJDK.ClassLibrary.dlldllClass.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;
}

结果截图

Screen1.JPG

Screen2.JPG

历史

  • 2008年12月30日:初始发布
  • 2009年1月6日:添加了文章的源代码和图片
© . All rights reserved.