1. 程式人生 > >用java寫的後臺方法可以提供給C#呼叫嗎?

用java寫的後臺方法可以提供給C#呼叫嗎?

    最近和公司搞C#的同事聯合搞了一個專案,我把我這邊的資料加密之後傳給C#,然後C#在對接收到的資料解密。可是問題來了,我這邊用JAVA加密的資料C#的同事怎麼也解密不出來,於是我就想到了可不可以將JAVA解密的方法轉成C#的dll檔案給到C#那邊呼叫,於是網上搜索了下還真有,下面就說下我的具體操作。

    步驟一:到IKVM官方網站下載IKVM需要的元件 http://sourceforge.net/projects/ikvm/files/ikvm/

            我選的是“0.42.0.3”版本下面的元件,具體如下圖所示:

 

步驟二:將ikvm-0.42.0.3.zip解壓到一個路徑,我解壓到了C:\ikvm下面,然後在電腦的環境變數裡面加多一個環境變數,變數名為IKVM_HOME,變數值為前面解壓的目錄“C:\ikvm\ikvm-0.42.0.3

,然後在Path變數裡面加入“;%IKVM_HOME%\bin”就可以了,截圖如下:



    步驟三:使用jar命令將已經編譯後的java中Class檔案進行打包,使用eclipse編譯之後找到存放.class檔案的classes資料夾,使用命令:“jar cvf test.jar -C classes/ .”,其中test.jar為要生成的jar包;classes/ . 為指定的當前目錄classes下的檔案,該資料夾包括子資料夾及class檔案,生成的test.jar就在classes資料夾的同級目錄,當然當前目錄你也不一定要指定為classes,還可以指定為classes目錄裡面的子目錄,截圖如下:


步驟四:將上面打包好的jar包轉換為.dll控制元件,執行命令:ikvmc -out:test.dll test.jar,test.dll,其中test.dll為要生成的dll檔名,test.jar就是第三步生成的jar包,截圖如下:

步驟五:     截至步驟四生成dll檔案的功能已經完成,接下來就是給C#端呼叫。C#端除了匯入我們生成的dll外,還要匯入的dll檔案有:

%IKVM_HOME%/bin/IKVM.OpenJDK.Core.dll
%IKVM_HOME%/bin/IKVM.Runtime.dll
%IKVM_HOME%/bin/IKVM.Runtime.JNI.dll

網上說的是匯入上面三個dll檔案,但是我發現我還須匯入:

%IKVM_HOME%/bin/IKVM.OpenJDK.Security.dll

%IKVM_HOME%/bin/IKVM.OpenJDK.Util.dll

當然那些包要匯入不是絕對的,要看具體的功能程式碼,把dll發給C#呼叫發現取消那些dll在去%IKVM_HOME%/bin路徑下面拷就可以了。

步驟六:如何呼叫生成的dll檔案裡面的方法呢?寫法跟在java裡面的寫法一樣。

例如java程式碼為:

                   package com.test;
                   //要呼叫的Java類 
                   public class Test {
                            //要呼叫的Java方法 
                            public String test() {
                                return "test is ok";
                            }
                  }
在C#裡面呼叫方式為:
//引入dll檔案
using com.test; 

//程式呼叫
Test test=new Test();
test.test();
就這樣大功告成了。