一、需求闡述
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