文章目录[点击展开](?)[+]

前言

开发环境

客户端:Unity3D开发(C#)

服务器:Java (基于Java7)

日   期:2016年09月

需求说明

部分服务器的部分逻辑功能在客户端实现一遍,可以简单的理解为服务器的部分逻辑代码搬到客户端来实现一遍。

想到的办法是代码转换。有两个原因:

  • 时间问题,把时间用在更有意义的事情上。
  • 解放双手和大脑,无须把相同的代码写两遍。

源代码转换法

源代码转换就是指把Java的代码转换成C#的源代码。

这样做的好处是方便后续的开发和调试,有源码更放心。

以下是几个工具,用于Java源码转换到C#源码

Java Language Conversion Assistant

文档:https://msdn.microsoft.com/zh-cn/library/1kwtxa08(v=vs.80).aspx

下载:https://www.microsoft.com/en-us/download/details.aspx?id=14349

visual studio 2008及之前的老版本集成此工具,但从visual studio2010起已不提供,故放弃之。

j2cstranslator

下载:https://sourceforge.net/projects/j2cstranslator/

介绍:http://www.cnblogs.com/Lawson/archive/2012/02/21/2361827.html

开源,免费,但13年至今未更新

octopus .NET Translator

官网:http://www.remotesoft.com/octopus/

收费,未进行详细了解

Java to C# Converter

官网:http://www.tangiblesoftwaresolutions.com/Product_Details/Java_to_CSharp_Converter.html

介绍:http://www.cnblogs.com/yiyan127/p/CSharp_CrackJava2CSharpConverter.html

收费,免费版有1000行代码限制。看了官网介绍后,决定使用它。

XES – Java To C#

官网:http://www.euclideanspace.com/software/language/xes/userGuide/convert/javaToCSharp/index.htm

下载:https://sourceforge.net/projects/xes/files/OldFiles/xes_java_runtime_alpha06.zip/download

免费,似乎用起来并不那么理想,目前的最新版本是2004年,未有更新,故放弃之。

Java to C# Converter

经过对比之后,我选择了Java to C# Coverter,此工具的更多详情,可以在官网的介绍中查看

转换过程中的信息信息,会出现在对话框中,同时也会标注在转换后的代码中。

虚拟机运行法(IKVM)

本小节主要是说 IKVM在Unity中的使用。

IKVM下载:https://github.com/Unity-Technologies/kaizen/tree/master/bundles/IKVM.NET

IKVM和Unity

话题讨论

http://forum.unity3d.com/threads/building-project-with-ikvm-dlls-inside.101097/

JavaToDll导出

下图中,上图是Java的源代码,下方是转换成Dll后反编译查看的代码。

我的测试

引擎版本:Unity 4.0 / Unity 5.3.5 (目标平台测试过 Windows和Android 平台)

IKVM:ikvm-7.2.4630.5

OS:Windows 7 x64

  1. 从git或官网下载ikvm,比如我下载的ikvm-7.2.4630.5.zip,并解压
  2. 拷贝ikvm-7.2.4630.5\bin\下的所有dll 到Unity的Assets\Plugins 下
  3. 拷贝Java转换出的dll,放到Assets\Plugins 下,比如我的hello.dll
  4. 在Unity的脚本中调用java中的class , method 等等

下方是我测试过程中出现的Error,出于性能和后期调试考虑,我放弃了此种方式,采用将Java代码转换成C#源码的方式。

已知Error

当在脚本的全局变量,返回值,协程中引用了java中的class,method时,就会报以下Error。

private ExampleLibrary exampleLibrary2;IEnumerator CoLog(){int idx = 0;ExampleLibrary exampleLibrary = new ExampleLibrary();while (idx < 100){DoLog(exampleLibrary.HelloWorld());yield return null;idx++;}}

但如果是内部变量则不会有这些Error。

void TestLog(){ExampleLibrary exampleLibrary = new ExampleLibrary();for (int idx = 0; idx < 20; idx++){DoLog(exampleLibrary.HelloWorld());}}

运行时Error

GameObject (named 'Main Camera') references runtime script in scene file. Fixing!
The script behaviour 'IKVM_Java_HelloWorld' could not be instantiated!

Project中选中脚本时的Error

TypeLoadException: Could not load type 'IKVM_Java_HelloWorld' from assembly 'Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
System.MonoType.GetFields (BindingFlags bindingAttr) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/MonoType.cs:164)
UnityEditor.MonoScriptImporterInspector.ShowFieldInfo (System.Type type, UnityEditor.MonoImporter importer, System.Collections.Generic.List`1 names, System.Collections.Generic.List`1 objects, System.Boolean& didModify) (at C:/buildslave/unity/build/Editor/Mono/Inspector/MonoScriptInspector.cs:75)
UnityEditor.MonoScriptImporterInspector.OnInspectorGUI () (at C:/buildslave/unity/build/Editor/Mono/Inspector/MonoScriptInspector.cs:117)
UnityEditor.InspectorWindow.DrawEditor (UnityEditor.Editor editor, Int32 editorIndex, Boolean rebuildOptimizedGUIBlock, System.Boolean& showImportedObjectBarNext, UnityEngine.Rect& importedObjectBarRect) (at C:/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:1231)
UnityEditor.DockArea:OnGUI()

测试代码review

https://github.com/zhaoqingqing/blog_samplecode/tree/master/technical-research/java-to-csharp

本文转自赵青青博客园博客,原文链接:http://www.cnblogs.com/zhaoqingqing/p/5912594.html,如需转载请自行联系原作者

Java To CSharp源代码转换相关推荐

  1. java to csharp_Java To CSharp源代码转换

    导读热词 前言 开发环境 客户端:Unity3D开发(C#) 服务器:Java (基于Java7) 日   期:2016年09月 需求说明 部分服务器的部分逻辑功能在客户端实现一遍,可以简单的理解为服 ...

  2. 使用java对html源代码(拼装、可获取页面源代码)转换为(html页面,doc文档文件,pdf格式),doc文件转换成为pdf,文件的删除、压缩功能

    目录: 1.转换成为html页面 2.html源代码转换成为doc文件 3.html源代码转换成为pdf文件 4.压缩多个文件成为一个zip文件 5.对文件进行删除 实施过程: A.html页面的实现 ...

  3. 编译器 LLVM Clang原理与实战 制作自己的编译器 source-to-source 源代码转换 编译遍 compile pass 代码插桩

    编译器 LLVM Clang原理与实战 参考1 clang LLVM CMU 教案 深入剖析-iOS-编译-Clang-LLVM LLVM_proj LLVM编程索引 llvm源码浏览带跳转 llvm ...

  4. java bean与xml转换_Java Bean与xml互相转换的方法分析

    本文实例讲述了Java Bean与xml互相转换的方法.分享给大家供大家参考,具体如下: XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦.下面介 ...

  5. java如何将string转换成date_java如何将string类型转为date类型?Java的转型方法

    学习Java的小伙伴们有时候可能会碰到这么一些烦恼,写日期的时候代码一直报错,原因就是日期一直写的是字符串,在项目里就不能写成字符串了,必须把字符串类型转成日期类型,那Java中如何将字符串Strin ...

  6. java中把map转换成list

    private String key;     private String value;          //把map转换成list的公共方法     public static List map ...

  7. Java DO到DTO转换利用spring 的BeanUtils.copyProperties

    Java DO到DTO转换利用spring 的BeanUtils.copyProperties() public static <T> List<T> copy(Object ...

  8. JSON与Java对象的互相转换

    JSON与Java对象的互相转换 例一(单个对象进行赋值): @RequestMapping("test1.do")@ResponseBodypublic JSONObject t ...

  9. Java 相同类型强制转换异常

    Java 相同类型强制转换异常 参考文章: (1)Java 相同类型强制转换异常 (2)https://www.cnblogs.com/LoveShare/p/11785056.html (3)htt ...

  10. java rtree源码_rtree R树用java实现的源代码,欢迎广大用户学习交流 Applet 272万源代码下载- www.pudn.com...

    文件名称: rtree下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 159 KB 上传时间: 2017-03-14 下载次数: 0 提 供 者: 伊恩泽 详细 ...

最新文章

  1. Windows系统——VMTK安装教程
  2. Linux shell if判断=左右必须要有空格
  3. android 代码设置EditText的hint字符
  4. 处理Akka应用程序中的每个事件
  5. 看了新闻,思科研发中心 没有成都的。。。
  6. Java架构-每秒上千订单场景下的分布式锁高并发优化实践!
  7. java jxl读取xlsx_Java添加、读取Excel公式
  8. 《Linux内核分析》(二)——从一个简单Linux内核分析进程切换原理
  9. [转载]Qt之自定义界面(二)添加最小化、关闭按钮、添加背景
  10. Hexo next博客添加折叠块功能添加折叠代码块
  11. Atitit 发送post http 功能总结目录1. 常见三种模式 Form-data Form-urlencode Raw 12. Php code 12.1. urlencode
  12. 微pe工具箱怎么安装系统?
  13. Perl教程-3.基础语法
  14. windows server 2019 安装CA-证书服务器
  15. 函数 over() 的含义
  16. STM32串口通信发送Hello Windows!
  17. oppo禁用android系统通知栏,状态栏设置OPPO版
  18. 计算机两个硬盘的作用,电脑装2个硬盘有什么好处与坏处
  19. 《父与子的编程之旅-与小卡特一起学python》第18章
  20. centos7 离线安装gcc pcre-devel openssl-devel zlib-devel

热门文章

  1. 15.SpringMVC和Spring上下文关系(为什么SpringMVC可以调用到Spring)
  2. iPhone UI 元素大小
  3. Clash of Clans通关秘诀
  4. Java开发笔记(一百四十二)JavaFX的对话框
  5. python的dict()字典数据类型的方法详解以及案例使用
  6. WinForm:API
  7. 南海区行政审批管理系统接口规范v0.3(规划) 5.投资项目联合审批系统API 5.1.【uploadFile】证件文书附件上传...
  8. LinkCode 第k个排列
  9. 常见Struts、Hibernate、Spring、J2EE、ibatis、Oracle等开发框架架构图及其简介
  10. ARPSpoofing教程(四) - 捕获并分析数据包