IKVM.NET(http://www.ikvm.net/)是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序。本文将比较详细的介绍这个工具的原理、使用入门(如何java应用转换为.NET应用、),希望能给大家带来惊喜。
一、介绍
IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序。它包含了以下的组建:
一个用.NET实现的java虚拟机
一个java类库的.NET实现
致力于在java和.NET之间交互的工具
二、IKVM.NET的组件
IKVM.NET包含以下的部分
IKVM.Runtime.dll VM运行时和所有支持代码。它包括以下的功能:
Byte Code JIT 编译器和验证器 使用JIT将Java Byte Code编译为CIL(C中间语言)。
对象模式映射结构 将.NET中的System.Object,System.String,System.Exception映射为java代码中的java.lang.Object, java.lang.String,java.lang.Throwable。
管理本地方法(在Classpath中)的.NET重新实现。
IKVM.GNU.Classpath.dll 被编译的GNU Classpath版本,它是由自由软件基金会实现的java类库和一些IKVM.NET附加代码组成的。注意:这里的GNU Classpath不是IKVM.NET的一部分,但是前者被用在IK.VM.NET中。
IKVM.JNI.
.dll 通过实现JNI接口管理C++汇编。作为一个可选部分,只在程序使用自己的本地库时才被用到。而对于纯java程序来讲是不会被用到的。
ikvm.exe 与java.exe很类似的启动执行程序(动态模式)。
ikvmc.exe 静态编译器,被用来编译java类和jar使其成为.NET汇编(静态模式)。
ikvmstub.exe 一个从.NET汇编生成存根类的工具,就如javap一样反编译.NET汇编。IKVM.NET了解如何存根并用实际的.NET类型引用替换对存根的引用。
IKVM.AWT.WinForms.dll 非常有限的零散AWT实现。
三、IKVM原理
1.如何替换JVM
IKVM应用包含了采用.NET实现的java虚拟机。在一些场合,我们可以用它替换掉java。例如: java -jar myapp.jar 将被替换为 ikvm -jar myapp.jar。
2.在.NET应用中使用java类库
IKVM.NET包含ikvmc,这个在java bytecode与.NET中间语言的转换器。如果我们使用一个被用在.NET平台的java库的话, 运行ikvmc –targetlibrary mylib.jar(mylib.jar在这里指代我们的jar文件)来生成mylib.dll。例如apache FOP项目是一个开源的XSL-FO处理器项目,它使用java语言编写的用于从xml生成PDF文档。使用IKVM.NET技术,我们可以将apache FOP用在任何的.NET应用中。这样在开发.NET应用的同时利用IKVM便可以使用java开源项目这个免费的软件仓库。尽管在IKVM.NET没有提供在.NET中使用的java编译器,但是我们可用开源的Jikes编译器将java源代码编译为JVM bytecode,然后使用ikvmc –targetexe myapp.jar来生产.NET执行文件。我们甚至可以通过包含ikvmstub应用的方式在我们的java代码中用.NET API。
四 语法(译者注:这个工具是在windows命令提示窗中使用的)
ikvmc [ options ] classOrJarfile [ classOrJarfile ... ]
参数见下。
类文件(.class)或包文件(.jar)
Java类或包文件的名字可以含有通配符(如*.class)。
参数----参数说明
-out:输出文件----指定输出文件的文件名。文件名应含有扩展名.dll(参数-target设为library时)或.exe(参数-target设为exe或winexe时)。一般地,缺省状态下ikvmc会根据输入文件名和-target参数来确定输出文件名。但是,如果在输入文件名中使用了通配符,那么就必须使用这个选项来指定输出文件名。
-assembly:程序集名称----指定生成的程序集名称。一般地,缺省状态下,程序集名就是输出文件名。
-target:目标类型----指定生成目标.exe或.dll文件的类型,可以指定如下值:
exe——生成一个在windows命令窗口中运行的可执行程序。
winexe——生成一个带有界面的.exe应用程序。
library——生成一个动态链接库(.dll)文件。
module——生成一个.net模块。
在Linux平台上,exe与winexe两个参数是没有区别的。
-keyfile:主文件名----主文件名用于指定结果程序集。
-version:M.m.b.r ----指定程序集版本。
-main:类名----指定含有main函数的类的名称。缺省情况下,如果-target参数设置为exe或winexe,ikvmc会搜寻合法的main函数,在找到的情况下会给用户提示。
-reference:----指定类库位置 。 如果Java代码使用了.NET的编程接口(API),那么使用这个选项指定这些动态链接库(dll)。如果引用了不止一个类库文件,那么此选项可以多次使用。可以使用通配符(例如:c:\libs\*.dll)。
- recurse:filespec---- 处理当前文件夹下所有可与filespec匹配的文件。例如:- recurse: *.class
-nojni----对于非Java函数(native methods)不要生成用于非Java代码的Java接口(JNI)。
-resource:路径名----指定Java资源的引用路径名。
-exclude:文件名---- 要排除的类名列表。
-debug----将调试信息输出。注意:只有当.class文件含有调试信息(即使用javac-g参数编译)时才有用。
-srcpath:路径----指定源代码的位置。与-debug同时使用。程序会将包中类的搜索路径指定为此路径,并从中搜索类的源代码。
-Xtrace:名称---- 显示所有该指定名称的跟踪点。
-Xmethodtrace:函数名 ---- 指定的生成的函数名,将函数跟踪器(method trace)生成到此函数中。
几点说明:
ikvmc利用Java类文件和包文件生成.NET程序集。它将输入文件中的Java二进行代码转化成.NET公共中间语言(CIL)。并利用它来生成:
.NET可执行文件(-target:exe or –target:winexe)
.NET类库(-target:library)
.NET模块(-target:module)
Java程序一般由一系列的包文件组成。ikvmc可以将多个包文件(和类文件)转化成一个单独的.NET可执行程序或类库文件。例如,一个程序包含main.jar、lib1.jar和lib2.jar可以转化成一个单独的main.exe文件。
处理多个包文件时,如果有多个相同的类或源文件,ikvmc会使用第一个读入的版本,而忽略以后读到的。这时会产生警告信息。因此,包文件的顺序至关重要。
注意:
为了得到最佳结果,使用ikvmc转换Java程序时,请按照Java程序中类路径的顺序在,把要转换包的列表键入ikvmc的命令行。
五 使用入门
- 到IKVM官方网站下载IKVM需要的组件 1) ikvm-0.40.0.1.zip ;2)ikvmbin-0.40.0.1.zip ;3)openjdk6-b12-stripped.zip
- 解压ikvm-0.40.0.1.zip,并将%IKVM_HOME%\bin添加到path中。此处的%IKVM_HOME%是指解压后ikvm的主目录。
- 到Debian IKVM下载IKVM.OpenJDK.ClassLibrary.dll。 或者到rayfile去下载data.tar.gz。这个文件可以直接用winrar解压。
- 你需要下载一个简单的工具undeb去解压.deb文件。 也可以到rayfile下载
- 解压ikvm_0.38.0.2+dfsg-2_all.deb文件。
- 新建一个Java文件, 如
package myPackage;
public class Hello {
public String sayHello(){
String str = "Hello, this String is from java program.";
return str;
}
}
7 编译Hello.java文件,然后将myPackage打包成一个jar文件,例如jar cvf myJava.jar myPackage
8 使用ikvmc -out:myJava.dll myJava.jar。你现在应该在看到一个myJava.dll文件。亦可以在转换时指定结果程序集 如: ikvmc -target:library myJava.jar - keyfile:key.snk
9 新建一个C#.NET项目,首先添加一下必须的DLLs
1) %IKVM_HOME%\bin\IKVM.OpenJDK.Core.dll;
2) %IKVM_HOME%\bin\IKVM.Runtime.dll ;
3) %IKVM_HOME% \bin\IKVM.Runtime.JNI.dll ; ( IKVM.OpenJDK.ClassLibrary.dll[这的DLL在ikvm_0.38.0.2+dfsg-2_all.deb\usr\lib\cli文件夹中。或者也可在data.tar.gz中的usr\lib\cli中找到)
添加第8步生成的myJava.dll到C#.NET项目中,然后using %package_name%就可以实现对Java的调用。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using myPackage;
namespace testIkvm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Hello h1 = new Hello();
String s1 = h1.sayHello();
txbx.Text = s1;
}
}
}
相关推荐
This manual provides the related technical information about the new developed Integrated Remote Management Processor (IRMP) – AST2400. This document is intended for product planners, system ...
This manual provides the related technical information about the newly developed Integrated Remote Management Processor (IRMP) – AST2500. This document is intended for product planners, system ...
实训商业源码-橙色购物中心应用程序移动个人中心页面-毕业设计.zip
关于mamba的一些内容,起源创新点等等
电子设计竞赛相关资源
基于机器学习的音频情感分析系统Python源码(高分项目),能够从语音中识别出四种基本情感:愤怒、快乐、中性和悲伤。个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统P
BusHound_v6.0.1
实训商业源码-Tudoucms跑腿同学-毕业设计.zip
Post 3_ Your Channel, PRBS and the Eye.pdf
内容概要:本文介绍了《车联网(智能网联汽车)产业发展行动计划(2025-2030年)》的内容,涵盖发展背景、现状、目标、重点任务及保障措施。全球智能网联汽车成为汽车产业变革的核心方向,中国通过“车路云一体化”试点等初步形成全产业链生态优势。面对技术瓶颈、标准缺失、商业模式不清等挑战,中国设定了到2030年建成全球领先智能网联汽车产业体系的目标,包括L3级自动驾驶规模化商用、智能网联汽车新增产值突破1万亿元等阶段性目标。重点任务涉及技术突破(如AI、通信、芯片等)、基础设施建设(如智能化道路、云控平台等)、标准与法规完善、示范应用与商业化、产业协同与生态构建。保障措施包括政策支持、人才培育、安全保障和宣传推广。最终目标是实现经济效益、社会效益和战略意义,推动中国从“跟跑”向“领跑”跨越。; 适合人群:对智能网联汽车行业感兴趣的各界人士,包括政府决策者、企业管理人员、科研人员、投资者等。; 使用场景及目标:①帮助政府决策者了解智能网联汽车的发展方向和政策措施;②为企业管理人员提供行业趋势和发展机会的参考;③为科研人员明确研究重点和技术突破方向;④为投资者提供投资领域的指导。; 其他说明:本文详细阐述了智能网联汽车产业的发展规划,强调技术创新、生态协同和安全可控,旨在推动中国智能网联汽车产业的全面发展,为全球汽车产业变革贡献中国方案。
项目描述:在ZYNQ的PL端部署基于HLS开发的卷积加速器和池化加速器,在PS端利用Python编程调用这些加速器完成交通标志识别。模型使用德国交通标志数据集(GTSRB)训练,精度达到97%。 文件目录说明: - HLS:包含卷积加速器和池化加速器的C语言代码。 - Train:包含训练所用的Python代码和最终模型参数文件。 - jupyter_notebooks:包含上传到PYNQ开发板上的Python代码文件和模型参数bin文件。上传后可使用Jupyter Notebook运行‘Traffic-Signs-Recognition.ipynb’进行测试,也可直接运行其他相关文件。。内容来源于网络分享,如有侵权请联系我删除。
内容概要:本文详细探讨了Maxwell永磁同步电机的电磁振动噪声问题,利用Maxwell软件进行仿真分析,涵盖电磁场分布、电磁振动特性和噪声水平等方面的数据采集与分析。基于仿真结果,提出了通过调整设计参数(如线圈匝数、电流大小)和改进结构、材料等方法来优化电磁力和降低噪声的具体策略。并通过实际案例展示了优化效果,最终提升了电机的性能、运行平稳性和市场竞争力。 适合人群:从事电机设计、制造及相关领域的工程师和技术人员,尤其是对电磁振动噪声有研究兴趣的专业人士。 使用场景及目标:适用于需要深入了解Maxwell永磁同步电机电磁振动噪声机制及其优化方法的研究项目或产品开发阶段,旨在提高电机性能、降低能耗和减少噪声污染。 其他说明:本文不仅提供了理论分析,还结合具体实例进行了详细的优化实践,对于理解和解决类似问题具有重要参考价值。
内容概要:本文详细介绍了商用车P2并联混合动力系统的HCU(整车控制器)控制策略及其建模方法。首先探讨了模式切换策略,针对不同工况如车辆速度、电池电量等因素进行模式选择。接着深入讲解了扭矩分配策略,考虑到了温度变化以及坡道情况对扭矩分配的影响。此外,还讨论了能量回收策略,利用预测性制动提高能量利用率。最后提及了故障降级策略,确保系统在出现故障时能够快速响应。文中提供了多个具体代码片段来辅助理解和实施这些策略。 适合人群:从事汽车电子控制系统开发的技术人员,尤其是专注于混合动力系统的研究人员和工程师。 使用场景及目标:帮助开发者将理论性的功能规范转化为实际可用的控制模型,适用于商用车P2并联混合动力系统的开发过程中,旨在提升系统的效率和平顺性。 其他说明:建议读者在实践中不断调整和完善模型参数,以适应不同的应用场景和技术要求。同时,在构建模型时应注意保持良好的可追溯性和验证性,以便后续维护和改进。
内容概要:本文介绍了信捷标准化PLC程序与信捷触摸屏程序在STC四轴机械手中的应用,详细解析了程序结构及其功能特点。PLC程序包括初始化、主程序和子程序,确保机械手动作精准协调;触摸屏程序提供人机交互界面,便于监控和控制机械手的操作。两者结合使机械手在冲压上下料环节替代人工,提高生产效率和质量,适用于大批量、重复性强的作业环境。文中强调了程序的清晰注释、库文件加密的安全措施,以及机械手的定位精度、稳定性、可靠性等优点。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和机械手应用感兴趣的读者。 使用场景及目标:适用于需要提升冲压生产线自动化水平的企业,旨在减少人工干预,提高生产效率和产品一致性,降低故障率并保障生产安全。 其他说明:尽管库文件已加密,但不影响程序的正常编写和运行,确保了系统的安全性与稳定性。
内容概要:本文详细介绍了基于STM32的四轴联动运动控制系统。系统不仅支持直线插补和圆弧插补功能,还实现了对四轴电机的精确控制,包括加减速控制和位置环控制。文中提供了详细的原理图和注释齐全的源代码,以及经过严格测试和优化的量产工控机代码,确保了系统的稳定性和高性能。此外,系统采用了高精度的编码器进行实时反馈,进一步提升了电机的位置控制精度。 适合人群:从事嵌入式系统开发、运动控制领域的工程师和技术爱好者。 使用场景及目标:适用于需要开发复杂运动控制系统的项目,如工业自动化设备、机器人等领域。目标是帮助读者理解和掌握四轴联动运动控制系统的原理和实现方法,从而能够独立开发类似的控制系统。 其他说明:本文提供的资料具有很高的实用性和参考价值,读者可以通过研究和实践,深入理解STM32在运动控制中的应用,并根据自身需求进行二次开发和定制。
实训商业源码-分期付款应用程序手机模板-毕业设计.zip
内容概要:本文介绍了基于PLC(可编程逻辑控制器)的自助洗车机控制系统的设计与实现。系统采用博途软件编写,实现了从启动到结束的完整洗车流程,包括喷水、刷洗、喷洒清洁剂、吹干等步骤。文中详细描述了洗车机的动作流程、原点复位设计、系统架构、代码与控制逻辑分析,并提供了人机界面、接线图和IO分配表等辅助资料。此外,还强调了系统的稳定性和优质售后服务。 适合人群:从事自动化控制领域的工程师和技术人员,特别是对PLC编程和洗车机控制系统感兴趣的读者。 使用场景及目标:适用于需要了解或开发自助洗车机控制系统的场合,旨在帮助读者掌握PLC编程技巧和洗车机的工作原理,提高系统的稳定性和可靠性。 其他说明:本文不仅提供了详细的硬件和软件设计方案,还涵盖了故障处理和售后服务的内容,确保系统的长期稳定运行。
实训商业源码-无线支付-毕业设计.zip
内容概要:本文档为《单片机硬件原理图(参考).pdf》,主要提供了用于第十四届全国大学生智能汽车竞赛室外光电组的单片机硬件原理图。文档详细列出了单片机电路的关键组件及其连接方式,包括但不限于复位电路、烧写器接口、舵机接口、电调接口、IIC接口、SCI接口、时钟电路、PWM接口等。此外,还展示了单片机与雷达、电脑之间的USB转串口电路,以及相关的电源管理电路和信号处理电路。文档中多次提及了具体元器件型号和参数,如电容、电阻、晶体管等,并附带了详细的引脚定义和连接关系。文档由北京钢铁侠科技有限公司提供,地址位于北京市海淀区上地信息路12号1层E区E105室。 适合人群:电子工程专业学生、参赛选手及指导教师,特别是对单片机硬件设计有一定基础的人群。 使用场景及目标:①帮助参赛选手理解单片机硬件架构和各模块的功能;②为实际电路板的设计与焊接提供详细的参考依据;③辅助进行故障排查和性能优化。 阅读建议:本原理图较为复杂,建议读者先熟悉各个模块的基本功能,再逐步深入理解具体的电路连接和参数设置。同时,可以结合实际硬件进行对照学习,确保理论与实践相结合。
内容概要:本文探讨了在日前电力批发市场中,多个微电网通过建立合作联盟,利用纳什讨价还价理论进行合作博弈,从而实现区域内可再生能源的灵活消费并降低成本。文章详细介绍了合作博弈模型的构建及其机制,分析了各微电网如何通过协商确定最优交易力和电价,最终达到利益最大化。研究表明,这种合作模式不仅提高了能源利用效率,还增强了微电网的市场竞争力。 适合人群:从事电力系统研究、分布式能源管理、智能电网规划的专业人士及研究人员。 使用场景及目标:适用于希望深入了解微电网合作博弈机制及其应用的研究者和技术人员,目标是探索如何通过合作博弈优化可再生能源的消费和成本。 其他说明:文章强调了合作博弈对于推动可再生能源市场化的重要性,并提出了未来进一步完善的建议。