IKVM C#​​ to Java Interop with Callback 使用 IKVM

mj_*_*mj_ 3 .net sockets ikvm hosts-file

我已经开始使用 IKVM 将 Java 库转换为 .NET CIL。我可以成功编写一个 C# 程序,该程序将(inproc)翻译后的 Java 程序集作为参考,并调用翻译后的 Java 代码。

我的问题是,有没有人熟悉如何使用 IKVM 从 Java 到 C# 进行调用(回调)?我一直在寻找一个好的教程或解释,但还没有看到。

任何帮助表示赞赏。谢谢,

mj_*_*mj_ 5

女士们,先生们,我想出了我自己的问题。先编码,后步骤。

Java类

public class TestClass {
private cli.CSharpLibrary.Library m_lib = null;

public void AddDelegate( cli.CSharpLibrary.Library lib )
{
    m_lib = lib;
}

public void FireDelegate()
{
    if( m_lib != null )
    {
        m_lib.ExecuteRunnableDelegate();
    }
}

public void PrintInt()
{
    System.out.print(23);
}
}
Run Code Online (Sandbox Code Playgroud)

C# 类

using ikvm.runtime;
using CSharpLibrary;

namespace CSharp
{
  class Program
  {
public static void DelegateTarget()
{
  Console.WriteLine("DelegateTarget Executed!");
}

static void Main(string[] args)
{
  Library lib = new Library();
  lib.m_runnableDelegate = new Delegates.RunnableDelegate(DelegateTarget);

  TestClass tc = new TestClass();
  tc.AddDelegate(lib);
  tc.FireDelegate();

}
}
}
Run Code Online (Sandbox Code Playgroud)

1) 编写您的 Java 应用程序

2) 将您的 *.class 文件转换为 jar 文件 (jar -cf myjar.jar *.class)

3)将jar文件转换成.NET程序集(ikvmc -reference:csharpassembly.dll myjar.jar)

此时应该工作。您可以运行 C# 程序,让它调用转换后的 Java 程序,反之亦然。注意 ikvmc 调用中的“-reference”标志。这会告诉 IKVM 在转换 Java 代码时,csharpassembly.dll 有一些需要注意的类定义。