Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java代码中重写或转换C代码?_Java_C#_.net_Mono_Interop - Fatal编程技术网

如何在Java代码中重写或转换C代码?

如何在Java代码中重写或转换C代码?,java,c#,.net,mono,interop,Java,C#,.net,Mono,Interop,我开始为客户端和服务器端使用.net(C#)编写客户端-服务器应用程序 不幸的是,我的公司拒绝为服务器盒上的Windows许可证付费,这意味着我需要用Java重写代码,或者使用Mono-way 有什么好方法可以用Java翻译C代码吗?服务器应用程序没有使用.net特定的功能,只使用了Spring.net、Hibernate.net和log4net等跨语言工具 谢谢。我只知道另一条路。是用java开发的,c版本是从java源代码自动生成的。没有好办法。我的建议是从Java开始,或者像你说的那样使用

我开始为客户端和服务器端使用.net(C#)编写客户端-服务器应用程序

不幸的是,我的公司拒绝为服务器盒上的Windows许可证付费,这意味着我需要用Java重写代码,或者使用Mono-way

有什么好方法可以用Java翻译C代码吗?服务器应用程序没有使用.net特定的功能,只使用了Spring.net、Hibernate.net和log4net等跨语言工具


谢谢。

我只知道另一条路。是用java开发的,c版本是从java源代码自动生成的。

没有好办法。我的建议是从Java开始,或者像你说的那样使用Mono。

尽管我认为第一个错误是选择了一种实现语言,但没有确保合适的部署环境,现在对此无能为力。我认为单程的会更好。必须重写代码只会增加项目的成本,特别是如果您已经有大量用C#编写的代码的话。一、 就个人而言,尽可能避免重写代码。

我建议构建Mono。你会遇到一些灰色地带,但总的来说,这很好。但是,如果您想为Java构建,您可以签出。这是一个商业产品,但它声称能够将CIL(C#编译器的输出)翻译成Java字节码。

除了可能的解决方案,将一种语言编写的程序直接翻译成另一种语言通常被认为是一个坏主意™ -- 特别是如果这种翻译是以某种自动化的方式进行的话。即使是由“真正的”程序员完成,逐行翻译应用程序通常也会导致不理想的最终结果,因为每种语言都有自己的习惯用法、优点和缺点,需要以稍微不同的方式完成


尽管这可能会很痛苦,但如果你的雇主要求用Java重写这个应用程序的话,这可能符合你和那些必须维护这个应用程序的人的最大利益。

Java和C在语法和语义上非常接近。真正的问题是细微的差别。如果许可对你有效(免费版本有一些明显的限制),那么蚱蜢确实是目前最好的解决方案。它完全基于Mono类libs(实际上相当不错),但运行在标准javavm之上。这很好,因为根据我的经验,Java虚拟机通常比Mono更快、更稳定。当涉及到表单/图形相关的API时,它确实比Mono有更多的弱点,但是,其中很多都没有从Mono VM移植到Java


不过,如果它能起作用,它可能会非常棒。性能有时甚至比在Windows上MS的VM上运行相同代码时更好。:)

我想从维护的角度来说,重写代码。这将提高projet的初始成本,但对于查看代码的人来说,以后的劳动密集度会降低。像以前的海报所说的那样,任何像这样的自动化操作都不能像“真正的”程序员那样出色,而且逐行转换也不会有多大帮助。您不想在以后生成可以正常工作但需要维护的代码。

我对Grasshopper一无所知,但这听起来是个坏主意。如果您打算用Java运行和维护此应用程序,您需要的是Java源代码,而不是C。我想我发现了一个重复的问题: