【开发者笔记】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. ...
随机推荐
- ASP.NET MVC传递参数(model), 如何保持TempData的持久性
一看到此标题,相信你也会.因为路由是可以从URL地址栏传过去的. 但是Insus.NET不想在地址栏传递,还是一个条件是jQuery的Ajax进行POST的.Insus.NET不清楚别人是怎样处理的, ...
- shell脚本中,for基于列表进行循环的实现方法
需求描述: 在写脚本中需要这么个需求,需要对一个列表中的值进行循环 比如,列表中的值mysqld,zookeeper,hbase 简单来说,for基于列表值的循环. 脚本测试过程: 1.测试脚本 #! ...
- POJ 2392 Space Elevator(多重背包变形)
Q: 额外添加了最大高度限制, 需要根据 alt 对数据进行预处理么? A: 是的, 需要根据 alt 对数组排序 Description The cows are going to space! T ...
- Extjs学习笔记--(六,选择器)
文档对象dom是javascript与页面元素的桥梁 选择器的作用就是通过元素的标签名,属性名,css属性名对页面进行快速,准确的定位及选择 Extjs的选择器:Ext.DomQuery Ext.qu ...
- laravel Eloquent 模型(也就是我本时说的Model)
laravel的 Eloquent 模型其实就是我们平时说的MVC里Model,只是换了个名字而已~ 1)Eloquent 是啥? Eloquent 本质就一个查询构建器(laravel里叫查询构建器 ...
- 使用HTML5 的跨域通信机制进行数据同步
离线应用系统的设计目标就是在网络离线情况下依然可以操作我们的应用系统,并在网络畅通的情况下与服务器进行数据交互. 所以离线应用系统最终会做成类似C/S架构的客户端应用程序.这边基于Chrome或者 S ...
- Binary XML file line #17<vector> tag requires viewportWidth > 0
Android高版本对比低版本 在我的项目中更改成 //buildToolsVersion '21.1.2'buildToolsVersion '24.0.1' // 24.0.1 必须用这个否则报B ...
- CentOs 设置静态IP 方法[测试没问题]
首先关闭VMware的DHCP: Edit->Virtual Network Editor 选择VMnet8,去掉Use local DHCP service to distribute IP ...
- 在create-react-app的脚手架里面使用scss
之前用vue-cli脚手架的时候,只需要引进sass需要的依赖包便可以引入scss,但是在create-react-app的时候,发现除了需要引入sass依赖,还需要进行配置: 不管用什么方法进行sa ...
- Servlet MVC 项目实战实例
MVC的架构模式,一直是JavaEE开发中所遵循的标准,如今很多框架都已经很好的实现了MVC,像大家所熟知的Struts,SpringMVC,JSF等,但是如果没有任何框架的支持,仅仅通过JavaWe ...