ikvm.net是什么

http://www.ikvm.net/

ikvm.net是能够运行在mono和.net framework的java虚拟机。它包括了

  • 在.net中实现的一个java虚拟机
  • java类库的.net实现
  • java和.net的互操作工具

它可以再.net中使用java库。它包括一个ikvmc可以讲java字节码转换为.net IL。如果你在.net application中引用java library 。

ikvm现在最大化的实现了与jdk1.4的兼容。

引用java api 到.net 中

首先需要添加IKVM.Runtime.dll , OpenJDK.ClassLibrary.dll到项目中,使用ikvmc将jar转换为.net dll。

ikvmc -target:library mylib.jar

例如我需要使用pdfbox在.net中调用,使用以下命令生成了PDFBox-0.7.3.dll

ikvmc -target:library PDFBox-0.7.3.jar

ikvm.net的组成

IKVM.Runtime.dll: VM运行时和所有支持代码。
它包括以下的功能:

  • Byte Code JIT 编译器和验证器: 使用JIT将Java Byte Code编译为IL。
  • 对象模式映射结构: 将.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.[Mono|CLR-Win32].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实现。

作者:张巍
出处:http://www.cnblogs.com/ac1985482/p/4126092.html
本文版权归作者和博客园共有,转载请注明出处,且在文章页面明显位置给出原文连接

IKVM.NET入门(2)的更多相关文章

  1. IKVM.NET入门(1)

    IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序.本文将比较详细的介绍这个工具的原理.使用入门(如何java应用转换为.NET应用.如何 ...

  2. 工具箱之 IKVM.NET 项目新进展

    在各种群里经常讨论的一个事情是.NET 如何调用 Java 的实现,最常见的场景之一就是在加解密方面Java提供的密钥,C#无法解密, C#中byte范围是[0,255],而Java中的byte范围是 ...

  3. 利用IKVM在C#中调Java程序

    原文转自:http://luanxiyuan.iteye.com/blog/1937081 IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java ...

  4. 利用IKVM在C#中调Java程序(总结+案例)

    IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序.本文将比较详细的介绍这个工具的原理.使用入门(如何java应用转换为.NET应用.), ...

  5. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  6. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  7. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  8. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  9. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

随机推荐

  1. split函数和merge函数

    split函数的主要功能是把一个彩色图像分割成3个通道,方便进一步的图像处理,具体说明如下: split Divides a multi-channel array into several sing ...

  2. 以中间件,路由,跨进程事件的姿势使用WebSocket

    通过参考koa中间件,socket.io远程事件调用,以一种新的姿势来使用WebSocket. 浏览器端 浏览器端使用WebSocket很简单 // Create WebSocket connecti ...

  3. DataContractSerializer数据不一致下序列化

       一.数据类型的等效性 例如下面定义的两个类成员名称.定义顺序都不一样,但是在DataContract.DataMember的Name属性作用下,两个类的实例对象序列化后的xml是一样的,因此Or ...

  4. BOM-使用定时器

    window对象包含4个定时器专用方法,说明如下表所示,使用它们可以实现代码定时运行,避免连续执行,这样可以设计动画 方法 说明 setInterval() 按照指定的周期,(以毫秒为单位)来调用函数 ...

  5. Css3盒子尺寸

    box-sizing属性 用来改变盒模式中的宽度和高度默认的计算方式. box-sizing: 1.content-box(默认值): 宽度和高度只包含内容区域 2.border-box: 宽度和高度 ...

  6. 打造自己的LinQProvider(四)

    打造自己的LinqProvider *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  7. 骆驼拼写法(CamelCase)

    在英语中,依靠单词的大小写拼写复合词的做法,叫做"骆驼拼写法"(CamelCase).比如,backColor这个复合词,color的第一个字母采用大写. 这种拼写法在正规的英语中 ...

  8. 【原】公司P2P平台的功能拆分

    银行回调:由原来写在PC门户项目中拆分开来,作为一个专门处理回调的项目,配置多个数据源,实时写入数据库. 定时回查:由原来写在PC后台管理项目中拆分开来,作为一个专门回查银行网关的项目. 请求银行:由 ...

  9. httpServletRequest中的流只能读取一次的原因

    首先,我们复习一下InputStream read方法的基础知识, java InputStream read方法内部有一个,postion,标志当前流读取到的位置,每读取一次,位置就会移动一次,如果 ...

  10. Executor、ExecutorService、ThreadPoolExecutor

    1.Executor Executor接口中中只有一个方法 执行已提交的Runnable任务对象. ExecutorService pool1 = Executors.newFixedThreadPo ...