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

2023-11-04

前言
最近在编写项目时候,遇到了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);
    }
并执行:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 摆动刷新周期

    我试图了解何时使用重新验证 重绘 打包 令人惊讶的是 我没有找到详细的底层文档 请随意链接 到目前为止我已经明白这都是 RepaintManager 的责任 油漆 重新油漆指的是脏 干净的东西 pack validate revalidat
  • 如何从 REstAssured 中的 Json 数组获取 JSON 对象

    任何人都可以帮我解决这个场景 我是新来的RestAssured和处理JSON在我们的自动化脚本中 我有一个API谁的回应是JSONArray i e id 1002 entity testcase fieldName TextName di
  • 如何从Web JavaScript应用程序获取桌面C#程序中的变量

    我遇到一个问题 有两个应用程序 一种是 C 中的桌面应用程序 另一种是 javascript 中的 Web 应用程序 运行桌面应用程序中的一些变量或信息需要传输到Web应用程序 有谁知道如何解决这个问题 有人愿意提供更多细节来解决这个问题吗
  • 获取运行时生成的类的字节

    我正在使用一个 Java 框架 该框架使用自定义类加载器在运行时生成一些 代理 类 我想为任何这样的类获取自定义 ClassLoader 从 loadClass 返回的与该类对应的原始字节数组 这可能吗 我知道 如果一个类作为资源存在 那么
  • Spring @Configuration如何缓存对bean的引用

    使用基于 Java 的配置时 Spring 如何防止再次调用 bar 我想知道编译时注释处理或通过代理方法 Configuration public class AppConfig Bean public Foo foo return ne
  • Java 通用问题

    下面的代码可以编译 但如果我取消注释行 它不会编译 我很困惑为什么 HashMap 确实扩展了 AbstractMap 并且声明映射的第一行可以正常编译 import java util AbstractMap import java ut
  • 使用 colt java lib 时出现“矩阵太大”异常

    我正在使用 cern colt matrix lib 进行稀疏矩阵计算 但似乎我一直遇到此错误 线程 main 中的异常 java lang IllegalArgumentException 矩阵太大 我认为这是因为构造函数在 nrows
  • Java可以进行进程监控吗?

    是否可以用Java编写一个在托盘中运行的应用程序 并且当启动某个应用程序时 它可以检测到它 我想对某些程序执行此操作 以了解我每周使用它们多长时间 我是 Java 新手 所以我不知道 Java 是否是最适合此操作的语言 或者它是否具有对操作
  • 在 Java Jersey 2 JAX-RS 中初始化单例

    我是泽西岛 2 22 2 的新手 请耐心等待 我正在创建一个与 LDAP 服务器交互的 REST 服务 用于存储 删除和检索用户数据 该服务通过执行加密 解密充当安全中介 在使用 REST 服务之前必须进行相当多的初始化 并且我只想执行此初
  • 从视图模型调用方法的命令

    好吧 我倾向于避免使用命令 因为它们总是让我感到困惑 但我正在进行一个新项目 并且正在尝试正确构建它 并且在我看来没有任何代码隐藏 基本上我现在想做的就是连接一个按钮来触发一个命令 在我的视图模型上执行一些操作 但不知何故 如此简单的事情仍
  • 我可以对(非成员)函数使用部分模板特化吗?

    我试图在 非成员 函数上使用部分模板专业化 但我在语法上遇到了问题 我在 StackOverflow 中搜索了其他部分模板专业化问题 但这些问题涉及类或成员函数模板的部分专业化 作为起点 我有 struct RGBA RGBA uint8
  • 为什么未到达的 try-catch 块会增加运行时间?

    我目前正在创建自己的容器库 但我已经看到无法访问 if 语句无效 try catch阻止增加运行时间 这是我的测试 Vector cpp template
  • bean 中的 Spring JavaConfig 属性未设置?

    我正在考虑将 Spring JavaConfig 与一些属性文件一起使用 但 bean 中的属性未设置 bean 中的属性未设置 这是我的网络配置 Configuration EnableWebMvc PropertySource valu
  • 生成范围 [min,max] 内的随机数 [重复]

    这个问题在这里已经有答案了 我正在使用 C 生成范围 min max 内的整数随机数 我在用 int random int int min int max return min rand max min 但我认为上面的代码适用于范围 min
  • 在 Java Web 应用程序中获取 DataSource 资源

    我的 context xml 文件中有以下资源标记
  • 如何创建和使用类箭头运算符? [复制]

    这个问题在这里已经有答案了 因此 在到处研究之后 我似乎找不到如何创建类箭头运算符 即 class Someclass operator gt 我只需要知道如何使用它并正确使用它 它的输入是什么 它返回什么 我如何正确地声明 原型化它 运算
  • 使用 JPA 和 Hibernate 时 DISTINCT 如何工作

    DISTINCT 在 JPA 中使用什么列 是否可以更改它 以下是使用 DISTINCT 的 JPA 查询示例 select DISTINCT c from Customer c 这没有多大意义 不同的列是基于哪一列 它是否在实体上指定为注
  • Selenium Webdriver 中的 IF 语句

    我想知道是否有人可以帮助我解决我正在尝试解决的问题以及 Java 中 Webdriver 的 If 语句 当登录到我正在测试的应用程序时 可以在主页之前进入安全问题页面 如果是新用户等 我希望测试中的代码做的是 如果出现安全问题页面 请填写
  • 在Framework 4.6项目中使用.net core DLL

    我已经在 net core 2 0 中构建了一个 DLL 现在我想在使用 net 4 6 1 框架的 WinForms 项目中使用它 我可以引用该 dll 但收到 System IO FileLoadException 表示找不到 Syst
  • C#:如何处理乱序 TCP 数据包?

    请有人解释一下如何处理乱序数据包 我使用原始套接字来捕获数据包 并在数据包到来时解析它们 但其中一些数据包的顺序错误 例如 ID 标志 16390 PSH ACK 16535 PSH ACK 16638 确认 16640 PSH ACK 1

随机推荐

  • 【参考答案】2023年“研究生科研素养提升”系列公益讲座

    一 单选题 1 李同学在撰写文献综述时发现 不少文献存在着不同版本 不同版本之间在页码标注甚至卷册划分上并不一致 下列选项中 李同学正确的处理方式是 将所引文字或观点的出处给出清晰的标示 掩盖转引为原创 转引标注为直接引用 引用译著中文版本
  • vue 动态ref绑定方法

    vue2 动态ref绑定方式 vue3动态组件ref 绑定方式
  • Vue 数据双向绑定原理——Vue 学习笔记(二)

    vue js 采用数据劫持结合发布者 订阅者模式的方式 通过 Object defineProperty 来劫持各个属性的 setter 和 getter 在数据变化时发布消息给订阅者 触发相应的监听回调 也就是说数据和视图同步 数据发生变
  • Atlassian Confluence 远程代码执行漏洞(CVE-2022-26134)漏洞复现

    目录 免责声明 Atlassian Confluence 远程代码执行漏洞 CVE 2022 26134 漏洞复现 漏洞概述 影响版本 漏洞复现 利用POC 利用过程 修复建议 参考 免责声明 本文章仅供学习和研究使用 严禁使用该文章内容对
  • Python实现图像质量评价准则PSNR

    本文引用自 Python代码之计算PSNR pytorch计算psnr qtSunnylove的博客 CSDN博客 计算PSNR的Python代码 网上有下面两种 import cv2 import numpy as np import m
  • windows安装nodejs【详细教程】

    安装nodejs 去官网下载https nodejs org zh cn download 双击安装msi 选择下一步 选择我同意 下一步 选择安装路径 点击下一步 点击下一步 点击下一步 点击安装 点击完成 查看版本号win r输入cmd
  • 线上知识竞答小程序

    前几天恰逢五四青年节 帮我们党支部开发了一套知识竞赛类答题小程序 文章末尾有小程序码可以体验 该小程序目前已完成 用户授权 授权后答题 答题完成展示排名 完整支持知识竞赛答题活动的需求 答题目前已支持单选 多选 判断三种题型 不详细介绍了
  • CATIA Automation对象架构-Application对象详解(一)Document/SettingControllers

    CATIA Automation对象架构 下面是CATIA Automation的对象架构 可以看出 Application是顶层对象 Application对象 从对象架构中 可以看到Application对象下的子对象主要如下 1 Do
  • 51单片机 数码管的静态显示和动态显示

    51单片机 数码管的静态显示和动态显示 数码管 Segment Displays 由多个发光二极管封装在一起组成 8 字型的器件 引线已在内部连接完成 只需引出它们的各个笔划 公共电极 数码管实际上是由七个发光管组成8字形构成的 加上小数点
  • ts如何使用终端直接输出console(基础教程)

    安装 typescript npm install g typescript 安装 ts node npm install g ts node 新建一个ts文件 比如 demo ts function add n1 number n2 nu
  • 前端安全总结

    你的服务器安全么 1 概述 在本人所处的公司的服务器正式遭到黑客攻击之前 一直都以为 黑客 是个遥不可及的词 直到真正成为了受害者时 才猛然意识到安全的重要性 有一些基本经验和心得总结出来 和同行分享一下吧 2 暴破手段 最粗暴的黑客行为
  • AB test 之 广告投放(二)

    在广告投放的A B测试中 有几个重要的注意要点需要考虑 目标和假设 明确测试的目标 并基于此制定假设 确定您希望测试的指标 例如点击率 转化率 收入等 并提出假设 即测试组和对照组之间是否存在显著差异 随机分组 确保测试组和对照组的分配是随
  • 【强烈推荐】 十多款2023年必备国内外王炸级AI工具 (免费 精品 好用) 让你秒变神一样的装逼佬感受10倍生产力 (5) AI编程自动写代码

    个人主页 极客小俊 作者简介 web开发者 设计师 技术分享博主 希望大家多多支持一下 我们一起进步 如果文章对你有帮助的话 欢迎评论 点赞 收藏 加关注 AI 编程自动代码生成 AI现在真的是无敌 连代码都可以生成 我的天 看来程序员失业
  • Conflux Hydra网络Hardfork升级已完成(2022.02.28)

    Conflux Hydra 网络 Hardfork 升级已经完成 目前网络状态稳定 最新网络版本号 v2 0 0 fix END 了解最新动态
  • Java单例模式(解决反射攻击,反序列化攻击)

    单例模式 什么是单例模式 单例模式就是确保类的实例对象只能有一个 类本身要实例化好这个对象提供给其他所有的类访问 单例模式就是为了避免状态不一致 单例模式特定 单例类只能有一个实例 单例类必须自己创建自己的唯一实例 单例类必须给所有其他对象
  • 雷军的发布会,真狠呀!

    在雷军演讲前 人物 用今年的热搜话题向雷军进行了提问 问题1 年年演讲灌鸡汤 算是卖成功学吗 雷军 成功学 说实话我真的不太懂 我每年办演讲 主要想跟大家分享一些我成长的经历 问题2 把失败经历当笑话讲 这心态要怎么练 雷军 刚开始的时候我
  • 比较运算符、逻辑运算符

    不管是比较运算符还是逻辑运算符 重点都是运算 是运算的话都会得到一个结果值 先说比较运算符 大概就是上面这些运算符 看运算符怎么运算的 直接判断这个比较逻辑上是不是正确的 就比如4 3 很明显是正确的 结果是正确的 值是用布尔值表示的也就是
  • 创建带图文的超级菜单(导航菜单)(二)

    Avada带有一个超级菜单功能 基本是在WP原有的基础上扩充的 功能还是挺好用 下面说下如何创建比较漂亮的超级菜单 此文内容主要在于理解超级菜单和其他项目的逻辑关系 搞清楚它的逻辑你就好操作了 本文目录 1 整体思路 2 其他须知 3 创建
  • 关于微信小程序开发中input、textarea等表单组件在键盘弹起时,页面显示内容被挤出顶部导航栏,解决方案的建议

    关于微信小程序开发中input textarea等表单组件在键盘弹起时 页面显示内容被挤出顶部导航栏 解决方案的建议 代码附图 希望采纳 键盘弹起时 解决键盘遮挡问题 开启键盘时 function keyboardOcclusion e i
  • java 调用C#语言写的dll文件代码 超详细过程

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