C# 使用IKVM.NET将Java jar包转换为dll文件
项目中遇到了无法正常跨语言加解密的问题,需要将jar文件转换为dll文件供c#调用。
一. 下载IKVM.NET及配置
下载地址:http://www.ikvm.net/download.html
解压后,需要配置环境变量,在"Path"中添加bin目录的路径。
二.转换dll
打开cmd,cd到jar包所在路径。 转换使用命令: ikvmc -target:library jar包名称.jar -r:依赖项1.dll -r:依赖项2.dll -r:..........
注意:需要先将被依赖的jar包生成为dll ,并 在 "-r:"中指定,否则生成的dll会有错误,显示class not found等:
示例:将包含sm2国密加密算法的“bcprov-jdk16-145.jar”转换为dll --->>
以此为例,bcporv.jar包需要依赖 junit.jar , 则先要生成junit.dll 。
log4j.jar依赖了javax.jsm以及mail.jar 则先生成javax.jsm.dll和mail.dll .......
以此类推,直到所有依赖项都成功生成为dll后,使用 -r:xxxxxx.dll 加上依赖项的dll再进行生成,
例如生成log4j.dll时:ikvmc -target:library log4j.jar -r:mail-1.4.7.dll -r:javax.jms.dll
也可以使用 -out:xxx.dll 指定生成dll的名称 : ikvmc -target:library crypWeb.jar -out:crpytoForDotNet.dll -r:log4j-1.2.17.dll -r:commons-lang-2.5.0.dll -r:bcprov-jdk16-145.dll -r:commons-codec-1.14.dll
另外,如果出现skiping class ,可以忽略,因为ikvm提供的dll中已存在
dll生成成功后(没有warning时),即可以像普通dll一样添加引用到c#项目
三. C#中调用
需要引用IKVM.NET提供的dll 。 到ikvm安装路径的bin目录中 找到相关的dll, 一般只需要IKVM.OpenJDK.Core.dll 。之后便可以调用dll中的java方法
另外:引用生成的dll时,中途产生的依赖项的dll也要引用 ;jar包中的包名就是命名空间名称
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)