簡單介紹:
使用第三方開源項(xiàng)目jni4net,實(shí)現(xiàn)java程序調(diào)用C#的DLL,當(dāng)然jni4net可以實(shí)現(xiàn)C#程序中調(diào)用java代碼。
傳送門
環(huán)境和工具
Win10 x64、Visual Studio 2015、Eclipse、jni4net
實(shí)現(xiàn)步驟
下載jni4net
1、 下載 jni4net
2、 下載后、解壓到相應(yīng)目錄,主要是bin和lib目錄下的內(nèi)容,我的如下圖:

編寫C#代碼
1、 用VS2015新建一個(gè)C#的類庫項(xiàng)目,項(xiàng)目名稱為HelloWorld,并新建一個(gè)類Hello.cs,完成后編譯項(xiàng)目,可以在項(xiàng)目的bin\Debug\目錄下找到一個(gè)HelloWorld.dll的文件。代碼如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloWorld
{
public class Hello
{
public static void display()
{
Console.WriteLine("Hello World From Csharp!");
}
}
}
新建java項(xiàng)目
1、 打開eclipse,新建一個(gè)java project,項(xiàng)目名稱為Jni4netProject,并新建一個(gè)類HelloWorldFromCsharp.java,如下圖

java調(diào)用dll
1、 打開VS2015 x64 Native Tools Command Prompt,切換到j(luò)ni4net的bin目錄下,并執(zhí)行命令:.\proxygen.exe "DLL所在路徑" -wd "java項(xiàng)目根路徑",執(zhí)行后java項(xiàng)目的根目錄下會多出下圖紅色框中的文件

2、將命令行切換到j(luò)ava項(xiàng)目的根目錄下,執(zhí)行命令build.cmd,java項(xiàng)目根目錄下會編譯出2個(gè)文件分別為HelloWorld.j4n.dll和HelloWorld.j4n.jar,如下圖

3、然后將jni4net的lib目錄下的jar文件和dll文件copy到j(luò)ava項(xiàng)目的根目錄下,將C#項(xiàng)目的HelloWorld.dll的文件也copy到j(luò)ava項(xiàng)目的根目錄下,并將HelloWorld.j4n.jar和jni4net.j-0.8.8.0.jar添加到Build Path,如下圖

4、最后編寫java代碼調(diào)用C#的DLL,代碼如下:
package com.ccm.jni4netproject;
import java.io.File;
import java.io.IOException;
import net.sf.jni4net.Bridge;
public class HelloWorldFromCsharp {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Bridge.setVerbose(true);
Bridge.init();
File loadDll = new File("HelloWorld.j4n.dll");
Bridge.LoadAndRegisterAssemblyFrom(loadDll);
helloworld.Hello.display();
}
}
執(zhí)行結(jié)果如下圖,可以看出已經(jīng)成功調(diào)用了C#代碼變成的DLL了

結(jié)語
雖然這種方法可以實(shí)現(xiàn)java與C#之間的相互調(diào)用,但是個(gè)人覺得這個(gè)方法比較具有侵入性,有必要還是重構(gòu)代碼比較好。