把Java项目的代码转换为C#代码
2016-03-30 17:22
274 查看
一个项目是Java开发的代码,转换成C#的代码,
工具介绍:
转换过程中用到了Eclipse的插件:j2cstranslator,项目地址在http://sourceforge.net/projects/j2cstranslator/ ,但能找到的最近插件下载地址在:http://sourceforge.jp/projects/sfnet_j2cstranslator/releases/,下载最新的插件com.ilog.rules.Java2CSharpTranslator_1.3.6.20110519_01.jar,有1.2M。通过插件可以方便的从Eclipse下把代码转换成C#代码,但为了让转换后的C#代码正常运行,还需要j2cstranslator插件官方提供的映射文件J2CSMapping,它的作用是让java的一些特性和c#的特性关联起来,正常编译并运行。对应的有.net2.0,3.5,4.0等不同映射文件。映射文件只有一个ILOG.J2CsMapping.dll。
但是用插件配套提供的映射.net文件,在VS下编译仍然有一些错误无法编译,经过大量尝试,我找到了另外一个.net开源工具:IKVM.NET,官方地址:http://www.ikvm.net/ 。IKVM内部实现了用.net写的JAVA虚拟机功能,并且包括从Jar包直接转换为dll的命令行工具,以及java和.net之间互相调用的环境支持。IKVM提供了30个dll文件以及3个exe文件。IKVM的一些调用和转换方式可以网上搜索下其他资源,我在转换后的项目中只引用了IKVM.OpenJDK.Core.dll文件就能编译通过,但最后运行时依靠IKVM的其他dll文件才运行正常。
转换为生产可用代码:
实际在转换IBE代码过程中,引用了ILOG.J2CsMapping.dll和IKVM.OpenJDK.Core.dll以及其他IKVM的dll后还是会有一些报错,比如java里用的super,.net里用的base调用基类等等问题,需要手工修改。Java中的socket处理方式和.net也不一样,需要手工修改代码。
要想在生产上使用,肯定不能依赖太多外部dll,虽然IKVM是开源的,但内部会有一些非托管的c++代码。到生产上使用,肯定要尽量少的依赖外部DLL,用.NET自身框架的代码实现JAVA的实现方式,这块就要根据实际情况灵活处理了,我在转换IBE过程中,发现大多是socket和Calendar的转换工作,经过不断调试和分析,终于替换掉了这些代码的转换。当然根据不同JAVA项目,可能需要转换的对象和处理方式不一样,需要对症下药了。
IKVM 工具用于编译生成.dll文件
转换过程:
装好Eclipse的插件后,打开JAVA版IBE源码,然后选择Eclipse的File->Export…,如图一:
图一
导出页面Other里多了一个ILOG Java to CSharp Translator选项,一路选择Next,后面有选择转换后的生成目录。转换后是没有csproj的项目文件,全部是.NET的源代码.cs文件。
然后新建.NET的解决方案,再新建一个.NET的项目,把转换后的文件包含到解决方案里。项目引用ILOG.J2CsMapping.dll和IKVM.OpenJDK.Core.dll文件,然后编译。这时可能还会出现很多错误,因为任何工具都不是万能的,尤其是对编程语言的互相转换,还需要手工进行一定的修改。
最后根据不同类型特性,再把依赖于外部的API方法手工切换到.NET自身框架提供的API,由于涉及代码保密,就不举例了。
源文件:http://www.cnblogs.com/Lawson/archive/2012/02/21/2361827.html
工具介绍:
转换过程中用到了Eclipse的插件:j2cstranslator,项目地址在http://sourceforge.net/projects/j2cstranslator/ ,但能找到的最近插件下载地址在:http://sourceforge.jp/projects/sfnet_j2cstranslator/releases/,下载最新的插件com.ilog.rules.Java2CSharpTranslator_1.3.6.20110519_01.jar,有1.2M。通过插件可以方便的从Eclipse下把代码转换成C#代码,但为了让转换后的C#代码正常运行,还需要j2cstranslator插件官方提供的映射文件J2CSMapping,它的作用是让java的一些特性和c#的特性关联起来,正常编译并运行。对应的有.net2.0,3.5,4.0等不同映射文件。映射文件只有一个ILOG.J2CsMapping.dll。
但是用插件配套提供的映射.net文件,在VS下编译仍然有一些错误无法编译,经过大量尝试,我找到了另外一个.net开源工具:IKVM.NET,官方地址:http://www.ikvm.net/ 。IKVM内部实现了用.net写的JAVA虚拟机功能,并且包括从Jar包直接转换为dll的命令行工具,以及java和.net之间互相调用的环境支持。IKVM提供了30个dll文件以及3个exe文件。IKVM的一些调用和转换方式可以网上搜索下其他资源,我在转换后的项目中只引用了IKVM.OpenJDK.Core.dll文件就能编译通过,但最后运行时依靠IKVM的其他dll文件才运行正常。
转换为生产可用代码:
实际在转换IBE代码过程中,引用了ILOG.J2CsMapping.dll和IKVM.OpenJDK.Core.dll以及其他IKVM的dll后还是会有一些报错,比如java里用的super,.net里用的base调用基类等等问题,需要手工修改。Java中的socket处理方式和.net也不一样,需要手工修改代码。
要想在生产上使用,肯定不能依赖太多外部dll,虽然IKVM是开源的,但内部会有一些非托管的c++代码。到生产上使用,肯定要尽量少的依赖外部DLL,用.NET自身框架的代码实现JAVA的实现方式,这块就要根据实际情况灵活处理了,我在转换IBE过程中,发现大多是socket和Calendar的转换工作,经过不断调试和分析,终于替换掉了这些代码的转换。当然根据不同JAVA项目,可能需要转换的对象和处理方式不一样,需要对症下药了。
IKVM 工具用于编译生成.dll文件
转换过程:
装好Eclipse的插件后,打开JAVA版IBE源码,然后选择Eclipse的File->Export…,如图一:
图一
导出页面Other里多了一个ILOG Java to CSharp Translator选项,一路选择Next,后面有选择转换后的生成目录。转换后是没有csproj的项目文件,全部是.NET的源代码.cs文件。
然后新建.NET的解决方案,再新建一个.NET的项目,把转换后的文件包含到解决方案里。项目引用ILOG.J2CsMapping.dll和IKVM.OpenJDK.Core.dll文件,然后编译。这时可能还会出现很多错误,因为任何工具都不是万能的,尤其是对编程语言的互相转换,还需要手工进行一定的修改。
最后根据不同类型特性,再把依赖于外部的API方法手工切换到.NET自身框架提供的API,由于涉及代码保密,就不举例了。
源文件:http://www.cnblogs.com/Lawson/archive/2012/02/21/2361827.html
相关文章推荐
- c# 加密解密帮助类
- 【排序算法】C#实现排序算法
- C# 常用方法
- c# 为什么结构中不能有实例字段初始设定值项
- VS2010远程调试总结-C#
- 《C#入门经典v6》读书笔记1 C#语言
- C#中 As 和强制转换的总结
- 语法高亮显示控件ICSharpCode.TextEditor
- 如何在.Net的C#中制作DLL文件
- C# 委托和事件 实现窗体间的通信
- C#_WinForm接收命令行参数
- C# 事件的简单理解
- 下载百度上的图片C#——输入名字就可以下载
- C# 调用Excel 出现服务器出现意外情况. (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)
- C#委托的介绍(delegate、Action、Func、predicate)
- C# Action<T> 委托
- C# 发送邮件方法2
- c#主窗体向子窗体上的报表传参数
- C#高性能大容量SOCKET并发(一):IOCP完成端口例子介绍(转)
- Gmap.net百度地图开发