用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”
步驟三:使用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();
就這樣大功告成了。