【开发者笔记】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. ...
随机推荐
- 将Spring源代码导入eclipse步骤
深入学习spring.研读源代码是必须的~ 1.到https://github.com/spring-projects/spring-framework/releases去找自己须要的spring版本 ...
- Java精选笔记_集合【Set(集合)接口】
Set(集合)接口 简介 同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了. ...
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserDao' def
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserDao' def ...
- ionic 下拉刷新,上拉加载更多
1)下拉刷新用的是 ion-refresher,使用示例如下: <ion-refresher pulling-text="Pull to refresh..." on-ref ...
- Android项目结构介绍
src/存放Java源代码gen/中存放系统自动生成的配置文件Android 4.4.2下包含android.jar文件,这是一个Java归档文件,其中包含构建应用程序所需的所有的Android SD ...
- option 选不中问题
function appAndBuz(appName,buzName,areaCenterCode){ //appName,buzName下拉框的值start $.ajax({ type: " ...
- ubuntu14.04 LTS 搜狗输入法安装和不能输入中文的解决方法
搜狗输入法安装 1.首先通过Ubuntu软件中心,需要安装:fcitx https://pinyin.sogou.com/linux/help.php 2.然后再安装搜狗输入法包 https://pi ...
- IIS7的HTTP到HTTPS的重定向
方法一设置IIS 从HTTP到HTTPS的IIS7中的所有流量重定向,将确保用户始终安全地访问该网站.有许多不同的方法来设置一个IIS7从HTTP重定向到HTTPS和一些比别人更好.理想的HTTP到H ...
- spring mvc的@Transactional注解
转自:https://www.cnblogs.com/yepei/p/4716112.html spring的@Transactional注解详细用法 概述 事务管理对于企业应用来说是至关重要的, ...
- 微信小程序 --- 拨打电话
拨打电话:wx.makePhoneCall btnclick:function(){ wx.makePhoneCall({ phoneNumber:'12580' }); }