用IKVMC将jar转成dll供c#调用
目录
- 前言
- ikvmc介绍
- ikvmc下载安装
- 下载并解压
- 设置环境变量
- jar->dll
- 常用参数说明
- 具体操作
- 解决方案
前言
实习到现在所需要的工具类给的都是jar包,但是我需要在.net环境下去实现,如果重新下的话回合那麻烦,因此如果能将c#能够调用jar那就太棒了
ikvmc介绍
IKVMC可以将jar转成dll,到现在为止已经成功转换3个jar为dll,期间碰壁无数,在此写下此篇文章希望能帮助到有需要的人。
ikvmc下载安装
下载并解压
这并没有什么很大问题,下载压缩包解压出来,解压出来的主要文件在bin目录下
设置环境变量
在win8.1/win10下的步骤如下:
- 通过 计算机/此电脑(根据系统名称而不同)右击->属性->高级系统设置->环境变量
- 找到系统变量下面的path添加路径如_
C:\ikvmc-XXX\bin\;
_ - 运行命令行
cmd
,输入ikvmc
查看帮助
输出如图所示,则准备工作已经完成
jar->dll
常用参数说明
-target:library
使用方法:ikvmc -target:library a.jar
由于我们的目的是把jar转为dll,此参数就是此作用
-reference:<filespec>(-r:<filespec>)
使用方法:ikvmc -target:library a.jar -r:b.dll
该方法作用若a.jar存在第三方的引用,则我们需要指明需要引用的dll
具体操作
注意:大多实际情况其实会很复杂,其实转换一个jar包,并不是一句代码就可以转换的,大多数的jar包会调用很多其他的包,这就需要做很多工作
我在这里举个实际例子
首先了解下项目的大致结构
这里有很多依赖项,但是真正需要的包为圈出来的三个
所以我们先尝试将这三个包转化为dll,最后在转化这个包并指明需要引入的dll
尝试转换为dll
cd 进入到我文件目录,使用ikvmc -target:library xxx.jar
命令转换为dll
如果你并没有ikvmc使用的经验那么,接下来的情况可能会让人无语
此图的意思是有些类没找到,有些类引用错误等
这幅图看到不用怕,并不是什么错误,而是一些警告,他说:兄弟 你编译的这些东西我都已经集成了在XXX中了,所以还是会转化成功
这幅图和第一个转化的结果一样许多class没引用,很多引用错误
以上的错误解决方法就是:指明需要引用的'包'(实际是dll)
看不懂什么意思?也就是说:嘿,我不知道你引用的是什么,你需要先把他转化成dll,然后再引用这些dll,我才能认识他们
解决方案
- 第二个包已经转化成功,直接用
ikvmc -target:library xxx.jar -r:xxx.dll
添加引用即可 - 2个找不到类和引用错误的包我们需要将他所引用的jar包先转为dll
但是这里又是一个问题:
A->B A-> F B->C B->D D->E .....
可能会出现这种情况A依赖B包F包 B包依赖C包D包 D包又依赖于E包。。。
如果碰到这种情况:我给你2个建议,- 第一个是一直找下去 找到最低层的包为止,将其转化,再一层层转化上来
- 若某些方法调用了其他包的方法,而这些方法我我们又不需要用,那留着干什么,何不把他干掉更轻松愉快
- 若问题如上所示,找到你所需要掉用的核心代码,该代码所需要jar包,
我找到的就是那三个jar,其他的都无关紧要下载反编译工具,通过反编译jar包为java,再提取核心代码变成回jar包,这里只能靠你自己的聪明才智了
这是我新建的一个工具项目,InfoXX.jar可以直接引用,其他2个包又依赖了别的包,我删除了无关紧要的代码移除了依赖项,最后通过Export导出即可
再处理以上问题你所花的时间我相信会占用整个处理过程大部分时间,不要觉得烦,通常情况,你并不是把整个项目转化为.net项目,而是某些功能需要调用java的代码,所以情况不会太悲观
这是我导出的jar包,注意下导出的时候无需勾选libs下的依赖jar包,我们通过将依赖jar包转化为dll,显示的指定,所以无需一起导出
最后通过ikvmc -target:library xx.jar -r:xx.dll
进行转化,转化成功的如图所示,未弹出任何错误以及警告,若弹出了错误和警告dll依然会生成但是你在.net调用可能会报错
最后需要提非常重要的一点,有些人什么都喜欢用新的东西(比如我),但是ikvmc似乎不支持太高版本编译出的jar包(如1.8),如果一切都已经做很到位,但是还是导出dll失败,可以尝试降低java编译器的版本
希望此篇文章能给和我一样走过坑的人一点帮助
本文地址:https://www.cnblogs.com/Jack-Blog/p/4710848.html
作者博客:杰哥很忙
欢迎转载,请在明显位置给出出处及链接)
转载于:https://www.cnblogs.com/Jack-Blog/p/4710848.html
用IKVMC将jar转成dll供c#调用相关推荐
- matlab将cpp编译为dll,Matlab函数编译成dll供Cpp调用的方法图解教程
曾经实现过将matlab函数编译成dll供Cpp调用,这篇文章的目的是对新增的面向对象的的扩展mwArray进行讲解,matlab很容易和C/C++联合起来使用. 以前做过matlab7与c++的混合 ...
- 【转】matlab函数编译成dll供Cpp调用的方法
转自:https://www.cnblogs.com/vincenzo/archive/2009/09/09/1563467.html 以前做过matlab7与c++的混合编程:将m函数编译成dll给 ...
- matlab2014a + win764bit + vs2013混合编程(.m转成dll供C++调用)
在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目的. 1. 使用matlab生成dll文件 1.1 首先需要带有 ...
- C# wpf 封装成dll供C++调用
本文根据http://download.csdn.net/detail/l250178301/5647347创建,并加上自己的一些实际情况· 首先,新建一个wpf项目 然后 把app.xaml和那个窗 ...
- Matlab函数封装为DLL供Cpp调用
Matlab函数封装为DLL供Cpp调用 文章目录 Matlab函数封装为DLL供Cpp调用 Ⅰ目标 Ⅱ 学习 Ⅲ 实现 1. Matlab 函数封装为DLL 2. vs2015中C++调用Matla ...
- ikvm java转换成dll_利用IKVM.NET将Java jar包转换成可供C#调用的dll文件
C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...
- C++代码封装成dll供C#中调用、调用dll无可用源
C#工程不可以直接调用C++的头文件和Lib库等 所以在程序中C#需要调用的现象,先将C++的东西封装成动态链接库,再调用 若调用dll时显示:无可用源调用,说明导入的DLL路径不对. 静态库和动态库 ...
- django调用java_07.手把手教将深度学习利用Django将模型发布成服务供java调用
标题 问题 一.python发布成服务 1.先建立一个深度学习模型并训练好 2.建立一个预测方法去调用训练好的模型 3.建立一个Django工程 4.将python利用模型预测的代码放入Django项 ...
- C++封装dll供C#调用获取U盘/磁盘序列号信息
本文中只讲C++中获取U盘序列号信息的核心代码以及返回值,参数传递的问题,具体封装细节可以查看楼主的一篇其他帖子,里面有具体的封装过程,提供参考(如果使用我这种方法建议一定要看我下面的帖子,因为关于项 ...
最新文章
- [bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划
- 超实用的网络故障排障指南
- GDCM:gdcm::Orientation的测试程序
- python求字符串的所有子集_打印一字符串的所有子集 | 学步园
- C#读取EXIF信息类
- java aspectj_AspectJ基本用法
- 弹性地基梁板的计算理论_造价人常用小帮手:30个实用小软件+44套计算表,绝对实用...
- 瑞士加密银行SEBA将发行B轮融资股票作为证券代币
- Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)
- 【HTML5CSS3进阶学习01】气泡组件的实现
- Linux中级之负载均衡(lvs,nginx,haproxy)、中间件
- Vegas18 pro视频编辑软件下载官方激活码-序列号-密钥版-注册
- Excel 一些数据处理技巧
- 地理空间数据云 Landsat 8 OLI_TIRS 影像数据下载详解
- ArcGIS Engine二次开发常用接口及其使用方法(一)
- Linux下二维码生成工具:QRencode
- 人力资源数据分析(包含数据来源文件)
- 打印web页或文本文件时如何去掉讨厌的页眉,页脚?--暨开篇
- 设备Kingston DataTraveler 3.0无法连接到理想的主机控制器。将尝试将该设备连接到可用的最佳主机控制器......
- 【建站篇】如何将本地搭建的织梦站点上传到服务器空间?
热门文章
- SpringCloud 之 Zuul 网关搭建及配置
- 记一次由Redis分布式锁造成的重大事故,避免以后踩坑!
- 面试官问:Integer 如何实现节约内存和提升性能的?
- 阿里规范不建议多表join,可这SQL要怎么写啊?
- 40万总奖金!院士指导,顶级云服务免费用!2021全球高性能云计算创新大赛来了...
- GNN教程:Weisfeiler-Leman算法!
- PostgreSQL_row_number() over()
- Attention is not all you need
- MIT霸气护学生:你换导师,我替你买单!
- 吴恩达机器学习入门 2018 高清视频公开,还有习题解答和课程拓展,网友:找不到理由不学!...