简单介绍:
使用第三方开源项目jni4net,实现java程序调用C#的DLL,当然jni4net可以实现C#程序中调用java代码。
传送门
环境和工具
Win10 x64、Visual Studio 2015、Eclipse、jni4net
实现步骤
下载jni4net
1、 下载 jni4net
2、 下载后、解压到相应目录,主要是bin和lib目录下的内容,我的如下图:
编写C#代码
1、 用VS2015新建一个C#的类库项目,项目名称为HelloWorld,并新建一个类Hello.cs,完成后编译项目,可以在项目的bin\Debug\目录下找到一个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项目
1、 打开eclipse,新建一个java project,项目名称为Jni4netProject,并新建一个类HelloWorldFromCsharp.java,如下图
java调用dll
1、 打开VS2015 x64 Native Tools Command Prompt
,切换到jni4net的bin目录下,并执行命令:.\proxygen.exe "DLL所在路径" -wd "java项目根路径"
,执行后java项目的根目录下会多出下图红色框中的文件
2、将命令行切换到java项目的根目录下,执行命令build.cmd
,java项目根目录下会编译出2个文件分别为HelloWorld.j4n.dll
和HelloWorld.j4n.jar
,如下图
3、然后将jni4net的lib目录下的jar文件和dll文件copy到java项目的根目录下,将C#项目的HelloWorld.dll的文件也copy到java项目的根目录下,并将HelloWorld.j4n.jar
和jni4net.j-0.8.8.0.jar
添加到Build Path,如下图
4、最后编写java代码调用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();
}
}
执行结果如下图,可以看出已经成功调用了C#代码变成的DLL了
结语
虽然这种方法可以实现java与C#之间的相互调用,但是个人觉得这个方法比较具有侵入性,有必要还是重构代码比较好。