一、需求闡述
java實現的一個算法,想翻譯成c#,翻譯代碼之后發現有bug,於是不調試了。直接將jar打包成dll拿來用。
二、原理說明
jar可以通過ikvmc工具打包成dll,然后在項目中引入該dll和相應的dl后便可直接調用。
三、流程
1、打包jar,可通過myeclipse右鍵項目,export為jar就可以了。java項目結構:

2、生成dll,下載IKVMC工具:https://sourceforge.net/projects/ikvm/files/

點擊綠色按鈕即可。下載后解壓文件,解壓后目錄如下:

將bin目錄加入到系統環境變量中,這個工具是用來將jar轉換成dll的,加入變量之后方便隨處調用。
切換目錄到生成的jar目錄,運行:ikvmc -out:id3d.dll id3d.jar (前面是dll名稱,后面是jar名稱),生成結果如下:

c#項目中引入id3d.dll 文件,在引入剛剛bin目錄的IKVM.OpenJDK.Core.dll、IKVM.Runtime.dll、IKVM.Runtime.JNI.dll 文件。

。
到此為止,可以編寫c#代碼了。
4、書寫C# 代碼


如圖,可通過包名直接調用類。。
另外,引入了上述三個ikvm的dll之后,還可以在c#中直接書寫 java代碼喲。
來我們試一試:

/// <summary>
/// 將c#中Dictionary 內容復制到java的HashMap中
/// </summary>
/// <param name="dic"></param>
/// <returns></returns>
public java.util.Map getMap(Dictionary<string, Object> dic) {
java.util.Map ret = new java.util.HashMap();
foreach (KeyValuePair<string,Object> item in dic)
{
ret.put(item.Key,item.Value);
}
return ret;
}
五、說一下我遇到的坑
調用文件讀寫代碼會出錯,猜測原因是java中某些類在ikmv中沒有實現,沒有驗證。
感謝做基礎技術的前輩們,讓我們現在有這么多方便的工具可用!
附上ikvm百度網盤鏈接:https://pan.baidu.com/s/1OIc0h17jLNeDWDBRZjVNNQ 密碼:xz6o
