【開發者筆記】c# 調用java代碼


 

 

一、需求闡述

  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

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM