如何使用jni4net实现java调用c#的dll

简单介绍:

使用第三方开源项目jni4net,实现java程序调用C#的DLL,当然jni4net可以实现C#程序中调用java代码。

传送门

  1. jni4net
  2. jni4net in Github

环境和工具

Win10 x64、Visual Studio 2015、Eclipse、jni4net

实现步骤

下载jni4net

1、 下载 jni4net

2、 下载后、解压到相应目录,主要是binlib目录下的内容,我的如下图:

如何使用jni4net实现java调用c#的dll_第1张图片
jni4net

编写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,如下图

如何使用jni4net实现java调用c#的dll_第2张图片
jni4net

java调用dll

1、 打开VS2015 x64 Native Tools Command Prompt,切换到jni4net的bin目录下,并执行命令:.\proxygen.exe "DLL所在路径" -wd "java项目根路径",执行后java项目的根目录下会多出下图红色框中的文件

如何使用jni4net实现java调用c#的dll_第3张图片
jni4net

2、将命令行切换到java项目的根目录下,执行命令build.cmd,java项目根目录下会编译出2个文件分别为HelloWorld.j4n.dllHelloWorld.j4n.jar,如下图

如何使用jni4net实现java调用c#的dll_第4张图片
jni4net

3、然后将jni4net的lib目录下的jar文件和dll文件copy到java项目的根目录下,将C#项目的HelloWorld.dll的文件也copy到java项目的根目录下,并将HelloWorld.j4n.jarjni4net.j-0.8.8.0.jar添加到Build Path,如下图

如何使用jni4net实现java调用c#的dll_第5张图片
jni4net

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了

如何使用jni4net实现java调用c#的dll_第6张图片
jni4net

结语

虽然这种方法可以实现java与C#之间的相互调用,但是个人觉得这个方法比较具有侵入性,有必要还是重构代码比较好。

你可能感兴趣的:(如何使用jni4net实现java调用c#的dll)