【开发者笔记】c# 调用java代码
一、需求阐述
java实现的一个算法,想翻译成c#,翻译代码之后发现有bug,于是不调试了。直接将jar打包成dll拿来用。
二、原理说明
jar可以通过ikvmc工具打包成dll,然后在项目中引入该dll和相应的dl后便可直接调用。
三、流程
1、打包jar,可通过myeclipse右键项目,export为jar就可以了。java项目结构:

2、生成dll,下载IKVMC工具:https://sourceforge.net/projects/ikvm/files/

点击绿色按钮即可。下载后解压文件,解压后目录如下:

将bin目录加入到系统环境变量中,这个工具是用来将jar转换成dll的,加入变量之后方便随处调用。
切换目录到生成的jar目录,运行:ikvmc -out:id3d.dll id3d.jar (前面是dll名称,后面是jar名称),生成结果如下:

c#项目中引入id3d.dll 文件,在引入刚刚bin目录的IKVM.OpenJDK.Core.dll、IKVM.Runtime.dll、IKVM.Runtime.JNI.dll 文件。

。
到此为止,可以编写c#代码了。
4、书写C# 代码


如图,可通过包名直接调用类。。
另外,引入了上述三个ikvm的dll之后,还可以在c#中直接书写 java代码哟。
来我们试一试:

/// <summary>
/// 将c#中Dictionary 内容复制到java的HashMap中
/// </summary>
/// <param name="dic"></param>
/// <returns></returns>
public java.util.Map getMap(Dictionary<string, Object> dic) {
java.util.Map ret = new java.util.HashMap();
foreach (KeyValuePair<string,Object> item in dic)
{
ret.put(item.Key,item.Value);
} return ret;
}
五、说一下我遇到的坑
调用文件读写代码会出错,猜测原因是java中某些类在ikmv中没有实现,没有验证。
感谢做基础技术的前辈们,让我们现在有这么多方便的工具可用!
附上ikvm百度网盘链接:https://pan.baidu.com/s/1OIc0h17jLNeDWDBRZjVNNQ 密码:xz6o
【开发者笔记】c# 调用java代码的更多相关文章
- 六、Android学习笔记_JNI_c调用java代码
1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // ...
- Android学习笔记_JNI_c调用java代码
1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // ...
- C#调用Java代码
c#直接调用java代码,需要ikvmbin-0.44.0.5.zip.下载地址: http://pan.baidu.com/share/link?shareid=3996679697&uk= ...
- JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程
JNI/NDK Java调用C/C++前言 通过第三篇文章讲解在实际的开发过程中Java层调用C/C++层的处理流程.其实我们在很大的业务里也需要C/C+ +层去调用Java层,这两层之间的相互调用 ...
- python 调用 java代码
一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...
- python2.7 (x64) 调用 java 代码实践
背景:公司实施接口自动化测试,使用的框架python+unittest:因为开发使用的架构师SpringBoot,在测试过程中难免需要使用到python调用JAVA的一些接口,所以需要用到python ...
- C#调用java代码(IKVMC)
参考资料:https://blog.csdn.net/threadroc/article/details/51406587 参考1:http://www.cnblogs.com/Jack-Blog/p ...
- Python调用Java代码部署及初步使用
Python调用Java代码部署: jpype下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype 下载的时候需要使用Chrome浏览器进行下载 ...
- python调用Java代码,完毕JBPM工作流application
1.缘由 有一庞大Python django webproject,要引入工作流引擎,像OA一样.方便的流程控制与管理.Python或django关于工作流的开源插件,稀少,并且弱爆了,终于选用jav ...
- C代码调用Java代码
C代码调用Java代码应用场景 复用已经存在的java代码 c语言需要给java一些通知 c代码不方便实现的逻辑(界面) 反射 //1.加载类字节码 Class clazz = Demo.class. ...
随机推荐
- html 页面模块的常用命名
头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目: ...
- IE6图片元素img下出现多余空白问题
在进行页面的 DIV+CSS排版时,遇到IE6(当然有时Firefox下也会偶遇)浏览器中的图片元素img下出现多余空白的问题绝对是常见的对于该问题的解决方法 也是“见机行事”,根据原因的不同要用不同 ...
- java编写的2048程序
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util ...
- JBPM4.4_jBPM4.4的流程定义语言(设计流程)
1. jBPM4.4的流程定义语言(设计流程) 1.1. process(流程) 是.jpdl.xml的根元素,可以指定的属性有: 属性名 作用说明 name 流程定义的名称,用于显示. key 流程 ...
- 解决Bootstrap布局注册表单input标签前增加必填项*提示与input框不在同一行问题
注册表单部分代码如下: <form id="registForm" class="form-horizontal" action="${page ...
- MySQL性能优化(三)-- 索引
一.什么是索引及索引的特点 索引是一种数据结构 索引的特点:查找速度快,排好序,数据结构 索引的数据结构类型有:BTREE索引和HASH索引,下面展示的是BTREE索引. BTREE:balance ...
- jq的clone用第二次的时候为什么会复制clone出来的元素(即一变二,二变四)
原因是clone得到的是一个数组吗,每次再clone的时候,相当于操作了这个数组,肯定就会出现重复,我们只需要取第一个值就可以了,用.first()的方法 jquery(‘item‘).first() ...
- Eclipse+pydev解决中文显示和注释问题的方法大全
Eclipse+pydev解决中文显示和注释问题的方法大全 Eclipse的设置 window->preferences->general->editors->textedit ...
- django restframework 教程之Serialization(序列化)
介绍 本教程将会通过创建一个简单的粘贴代码项目,突出显示WebAPI,过程中,会介绍组成REST框架的各种组件,让你全面了解如何配合使用. 环境设置 建议使用virtualenv建立新的虚拟环境,确保 ...
- 谷歌Volley网络框架讲解——第一篇
自从公司新招了几个android工程师后,我清闲了些许.于是就可以有时间写写博客,研究一些没来的研究的东西. 今年的谷歌IO大会上,谷歌推出了自己的网络框架——Volley.不久前就听说了但是没有cl ...