码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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文件中添加依赖,如:

            
                com.xgtx
                ObcClient.j4n
                1.0.1
                system
                C:/dll/ObcClient.j4n.jar
            

            
                com.xgtx
                jni4net.j
                1.0.1
                system
                C:/dll/jni4net.j-0.8.8.0.jar
            


    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);
        }
    并执行:

    在这里插入图片描述​

  • 相关阅读:
    Flink + Hudi 实现多流拼接(大宽表)
    springboot员工工作量管理系统java
    机器学习模型——逻辑回归
    Java实战-用Java mail实现Exchange发邮件给你喜欢的人
    Git Reset Origin – 如何将本地分支重置为远程跟踪分支
    智能批量重命名,轻松删除文件名后缀数字并添加编号!
    【JDK】如何实现jdk1.8与jdk11环境的相互切换
    使用VS创建静态链接库.lib并使用
    计算机体系结构
    基于在线光度标定的单目直接视觉SLAM
  • 原文地址:https://blog.csdn.net/yyongsheng/article/details/126636693
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号