当前位置: 首页 > news >正文

java 调用C#语言写的dll文件代码 超详细过程

前言
最近在编写项目时候,遇到了java调用C#类库的情况,试了很多种方法,也遇到了很多坑。解决之后写下来。作为记录和分享给有用的朋友们。在这里我用的工具是jni4net-0.8.8.0,Visual Studio2015

一、编写C#类库代码,并生成DLL文件。
1.按如图步骤用Visual Studio(我用的vs2015)新建一个C#的类库项目,项目名称为HelloWorld。

在这里插入图片描述

在这里插入图片描述
创建C#类库项目步骤

2.重命名类名Hello

在这里插入图片描述
3.类库代码
namespace HelloWorld
{
    public class Hello
    {
        public static int display(int a,int b)
        {
            return a+b;
        }
    }
}

4.右键项目,生成。编译成dll

在这里插入图片描述 


二、编写java代码
1.用jni4net工具把dll文件编译;(jni4net工具下载地址:jni4net - Browse Files at SourceForge.net)
文件夹找到jni4net的bin目录,创建cmd命令文件,方便后续使用;
命令:.\proxygen.exe “DLL所在路径” -wd “java项目根路径”
如:.\proxygen.exe “D:\Java\HelloWorld.dll” -wd “E:\Project\Jni4netProject”
执行后java项目的根目录下会多出下图红色框中的文件和一个build.cmd文件

(运行是可能会遇到javac' 不是内部或外部命令,也不是可运行的程序 或批处理文件和'csc' 不是内部或外部命令,也不是可运行的程序 或批处理文件;需要配置JDK环境变量JDK 安装 Java环境变量配置 详细教程_yyongsheng的博客-CSDN博客和Microsoft.NET的环境变量在dos下用csc命令编译,提示“csc不是内部或外部命令,也不是可运行的程序”_yyongsheng的博客-CSDN博客)

在这里插入图片描述
2.将dll文件打包乘jar包
将命令行切换到java项目的根目录下(和src同级目录),执行命令build.cmd,java项目根目录下会编译出2个文件分别为HelloWorld.j4n.dll和HelloWorld.j4n.jar,
如下图:

在这里插入图片描述
3.拷贝文件并添加jar包依赖;
然后将jni4net的lib目录下的jar文件和dll文件copy到java项目的根目录下,将C#项目的HelloWorld.dll的文件也copy到java项目的根目录下, 

在这里插入图片描述


添加依赖的方式有多种(我用的第一种),如:
1.将HelloWorld.j4n.jar和jni4net.j-0.8.8.0.jar添加到File—Progect Structure --Modules–Depengdenies–

在这里插入图片描述

2.把jar包放到指定位置,在pom文件中添加依赖,如:

        <dependency>
            <groupId>com.xgtx</groupId>
            <artifactId>ObcClient.j4n</artifactId>
            <version>1.0.1</version>
            <scope>system</scope>
            <systemPath>C:/dll/ObcClient.j4n.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.xgtx</groupId>
            <artifactId>jni4net.j</artifactId>
            <version>1.0.1</version>
            <scope>system</scope>
            <systemPath>C:/dll/jni4net.j-0.8.8.0.jar</systemPath>
        </dependency>

4.java代码
public static void main(String[] args) {
        Bridge.setVerbose(true);
        Bridge.init();
        File dll = new File(  "HelloWorld.j4n.dll");
        Bridge.LoadAndRegisterAssemblyFrom(dll);
        int result =helloWorld.Hello.display(66,22);
        System.out.println("计算结果为:"+result);
    }
并执行:

在这里插入图片描述

相关文章:

  • Java面试题11-ReentrantLock中的公平锁与非公平锁的底层实现
  • 股票行情查询易语言代码
  • STM32学习记录 -- 通用定时器的配置(TIM2-TIM5)
  • node搭建服务器
  • 域名解析信息易语言代码
  • 【GNN报告】蒙特利尔大学朱兆成:基于图神经网络的知识图谱推理
  • ATF启动(二):BL1
  • Nginx之正则表达式、location匹配简介以及rewrite重写
  • Kafka 集群安装及常用命令
  • C++变量和基本类型
  • 室温熔盐-Romm Temperature Melten Salt-RTMS-离子液体
  • 无胁科技-TVD每日漏洞情报-2022-9-1
  • C++征途 --- 内建函数对象
  • 李沐d2l(十一)--图像增广
  • ubuntu 环境安装微信
  • [译] 怎样写一个基础的编译器
  • Angular 2 DI - IoC DI - 1
  • Apache Spark Streaming 使用实例
  • es的写入过程
  • HTTP中的ETag在移动客户端的应用
  • javascript面向对象之创建对象
  • JavaScript学习总结——原型
  • Python_OOP
  • Spring声明式事务管理之一:五大属性分析
  • yii2中session跨域名的问题
  • Zepto.js源码学习之二
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 用Visual Studio开发以太坊智能合约
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • Spring第一个helloWorld
  • 回归生活:清理微信公众号
  • 进程与线程(三)——进程/线程间通信
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $(function(){})与(function($){....})(jQuery)的区别
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • **PHP分步表单提交思路(分页表单提交)
  • .cn根服务器被攻击之后
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net core 6 集成和使用 mongodb
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Standard 的管理策略
  • .NET 命令行参数包含应用程序路径吗?
  • .net中生成excel后调整宽度
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • :“Failed to access IIS metabase”解决方法
  • ??eclipse的安装配置问题!??
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ JavaScript ] JSON方法
  • [ 蓝桥杯Web真题 ]-布局切换
  • [ 手记 ] 关于tomcat开机启动设置问题