Java呼叫C#類庫
原帖地址:https://bbs.csdn.net/topics/390624108
總體分三步走:
- 準備一個 C# 類庫 (dll)
- 編寫一個java 類
- 編譯 java 類並打包成jar,即可執行
第一步,我的 C#類庫程式碼
Calc.cs 程式碼如下:
using System; namespace MyCSharpDemoCalc { public interface ICalc { int MySuperSmartFunctionIDontHaveInJava(int mi); string PrintPatientInfo(patient aPatient); } public class DemoCalc : ICalc { private readonly Random r = new Random(); private patient Patient; public DemoCalc(patient aPatient) { Patient = new patient(); Patient.ID = aPatient.ID; Patient.FirstName = aPatient.FirstName; Patient.Sex = aPatient.Sex; } public int MySuperSmartFunctionIDontHaveInJava(int mi) { return mi + r.Next(); } public string PrintPatientInfo(patient aPatient) { return aPatient.ID.ToString() + " - " + aPatient.FirstName + " - " + aPatient.Sex.ToString(); } } }
patient.cs 程式碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MyCSharpDemoCalc { public class patient { private int id; private string firstname; private bool sex; public int ID { get { return id; } set { id = value; } } public string FirstName { get { return firstname; } set { firstname = value; } } public bool Sex { get { return sex; } set { sex = value; } } } }
編譯成一個 C# 的 dll比如 MyCSharpDemoCalc.dll 即可,FrameWork用什麼版本都可以
第二步、編寫一個java 類,程式碼如下:
MyCalcUsageInJava.java
import net.sf.jni4net.Bridge; import java.io.IOException; import mycsharpdemocalc.DemoCalc; import mycsharpdemocalc.ICalc; import mycsharpdemocalc.patient; public class MyCalcUsageInJava { public static void main(String arsg[]) throws IOException { Bridge.init(); //載入 C# 類庫 Bridge.LoadAndRegisterAssemblyFrom(new java.io.File("MyCSharpDemoCalc.j4n.dll")); //例項化 C# 類庫中的類 patient patient Patient = new patient(); Patient.setID(1); Patient.setFirstName("張三"); Patient.setSex(true); //例項化 C# 類庫中的類 DemoCalc ICalc calc = new DemoCalc(Patient); //呼叫 C# 類庫中 DemoCalc 類的方法MySuperSmartFunctionIDontHaveInJava final int result = calc.MySuperSmartFunctionIDontHaveInJava(123); System.out.printf("執行結果 : " + result + "\r\n"); //呼叫 C# 類庫中 DemoCalc 類的方法PrintPatientInfo final String result1 = calc.PrintPatientInfo(Patient); System.out.printf("執行結果 : " + result1); } }
第三步、編譯我的java檔案 MyCalcUsageInJava.java
分幾小步
A)下載 jni4net http://sourceforge.net/projects/jni4net/?source=dlp 解壓
B)在解壓目錄下建立sample目錄
C)在 sample目錄 中 建立 mycalc目錄
D)在 sample目錄 中 建立 work 子目錄 將 jni4net lib目錄中的 jni4net.n.w32.v20-0.8.6.0.dll、jni4net.j-0.8.6.0.jar、jni4net.n.w32.v40-0.8.6.0.dll、jni4net.n.w64.v20-0.8.6.0.dll、jni4net.n.w64.v40-0.8.6.0.dll、jni4net.n-0.8.6.0.dll 拷貝進來
E) 將編譯好的 C# 類庫 MyCSharpDemoCalc.dll 也拷貝到上面的 work子目錄中
F)在 work目錄中建立 build.cmd
@echo off
if not exist target mkdir target
if not exist target\classes mkdir target\classes
echo compile classes
javac -nowarn -d target\classes -sourcepath jvm -cp "e:\javacallc#\jni4net-0.8.6.0-bin\lib\jni4net.j-0.8.6.0.jar"; "jvm\mycsharpdemocalc\ICalc.java" "jvm\mycsharpdemocalc\ICalc_.java" "jvm\mycsharpdemocalc\DemoCalc.java" "jvm\mycsharpdemocalc\patient.java"
IF %ERRORLEVEL% NEQ 0 goto end
echo MyCSharpDemoCalc.j4n.jar
jar cvf MyCSharpDemoCalc.j4n.jar -C target\classes "mycsharpdemocalc\ICalc.class" -C target\classes "mycsharpdemocalc\ICalc_.class" -C target\classes "mycsharpdemocalc\__ICalc.class" -C target\classes "mycsharpdemocalc\DemoCalc.class" -C target\classes "mycsharpdemocalc\patient.class" > nul
IF %ERRORLEVEL% NEQ 0 goto end
echo MyCSharpDemoCalc.j4n.dll
csc /nologo /warn:0 /t:library /out:MyCSharpDemoCalc.j4n.dll /recurse:clr\*.cs /reference:"E:\javaCallC#\jni4net-0.8.6.0-bin\samples\myCSharpDemoCalc\work2\MyCSharpDemoCalc.dll" /reference:"E:\javaCallC#\jni4net-0.8.6.0-bin\lib\jni4net.n-0.8.6.0.dll"
IF %ERRORLEVEL% NEQ 0 goto end
:end
G)在mycalc目錄中建一個 java ant 編譯指令碼 build.bat
@echo off
copy ..\..\lib\*.* work
..\..\bin\proxygen.exe work\MyCSharpDemoCalc.dll -wd work2
cd work
call build.cmd
cd ..
echo compiling usage
javac -d work\ -cp work\jni4net.j-0.8.6.0.jar;work\MyCSharpDemoCalc.j4n.jar MyCalcUsageInJava.java
G)在cmd dos視窗中執行 mycalc目錄 中的 build.bat即可進行編譯l了,編譯效果:
H)執行編譯好的 jar包看看效果:
cd work
java -cp jni4net.j-0.8.6.0.jar;MyCSharpDemoCalc.j4n.jar;. MyCalcUsageInJava
今後只需要更新 C# dll即可,java程式碼無需重新編譯,簡單吧,很爽吧!
更多詳情:http://kan.weibo.com/con/3636924272047381
有任何疑問歡迎隨時找我交流。