3

我即将结束我在 C# 中创建的项目。不幸的是,目标硬件只带有 C/C++ 编译器。我父亲是一名嵌入式程序员,因此他将编写必要的代码以与硬件集成,但同时我需要找到一种翻译语言的方法。免费翻译是一个非常高的偏好,因为我目前资金非常紧张。

虽然我对 C++ 并不流利,但通过一个肮脏的翻译,我应该能够弄清楚使其运行所需的大部分内容。

编辑:

目标平台是mbed Microcontroller

4

8 回答 8

14

不。这行不通。

C# 有一个垃圾收集器。C 和 C++ 没有。您将不得不重新考虑如何在 C++ 中分配和释放对象。

很有可能,因为您已经完成了项目,用 C/C++ 重写它会很容易。你已经理解了这个问题,并且之前已经表达过一次。

于 2010-11-10T09:34:14.200 回答
6

从 c# 到 c++ 没有一对一的映射。较低级别的编程模型和平台非常不同。以内存管理为例。

您最好的机会是重写您的应用程序或尝试让.NET Compact Framework.NET Micro Framework在硬件中运行。

编辑:
请注意,如果您的硬件不受支持,至少 .NET Micro Framework 有一个移植工具包。

于 2010-11-10T09:38:54.353 回答
3

由于设计是应用程序开发的一半,您的 C#原型应该可以很好地为您服务,但您不太可能找到合适的自动翻译工具。如果你没有大量使用 .NET 类库,尤其是那些与底层 OS API 相关的部分,C# 应该很容易手动翻译成 C++。代码体语法和语义非常相似;更不同的是诸如类定义之类的封闭结构元素。

所需的工作量取决于应用程序代码的大小,但其中大部分是机械性的。最大的区别是您需要更加小心 C++ 中的内存管理,因为没有自动垃圾收集。

于 2010-11-10T14:50:35.063 回答
2

学习 C 或 C++。没有其他选择。

这两种语言都与 C# 和 .NET 完全不同,并且无法进行自动转换。(如果是的话,它肯定不会让你“弄清楚让它运行所需的大部分内容”。这将是完全无法识别的代码,无法阅读或扩展。)

为了编写一个有效的 C 或 C++ 程序,C 或 C++ 程序员需要编写代码。好消息是它不必那么困难。您不必学习 C++ 语言的每一个角落。但是你确实需要学习基础知识。

如果您正在寻找一种快速而肮脏的方式来起步,那么学习 C 可能是一个更好的选择,因为该语言要小得多且简单得多。但是 C++ 也是可行的。只是不要认为阅读 15 分钟的在线教程就可以逃脱惩罚。

于 2010-11-10T15:05:37.750 回答
1

没有翻译。

.NET Micro Framework已移植到与您的主板没有什么不同的Phycore LPC3180 (NXP)平台,因此可以完成,但您仍然需要将 .NET 框架移植到您的平台。除非您要将Meamo 移植到您的 mbed 板上,否则您不太可能使用 Mono AOT 。任何移植都需要您能够编写 C 代码。

最好和最快的方法是让你学习 C++。一旦您开始使用 C++ 并了解差异,C++ 和 C# 之间的差异就不会很大。您还必须使用 mbed 库来进行硬件控制和通信,而不是使用 C# 提供的库。

C# 代码是调试程序设计的一个很好的原型,但它不会帮助您实现目标。现在您了解了问题,它应该不难。

于 2010-11-10T11:29:17.363 回答
0

我不确定您是如何走到这一步的,却没有意识到目标平台无法运行 .NET,但如果Mono 的 Ahead-of-Time编译器能够输出到您的目标平台,可能值得一看。

至少那样你就不会扔掉(几个月的?)代码。

于 2010-11-10T09:38:57.153 回答
0

由于您使用垃圾收集语言编写应用程序,因此将其移植到 mbed 平台的最快方法应该是将应用程序移植到在 mbed 上运行的垃圾收集语言。

我没试过,但是eLua应该有一个在mbed平台上运行的初步端口,而且Lua学习起来相当简单。 http://mbed.org/users/jsnyder/notebook/elua-preliminary-port/

如果您可以让您的父亲在 mbed 平台上启动 eLua,我怀疑与尝试将应用程序转换为 C++ 相比,您可以轻松地进行转换。

于 2010-11-10T19:42:36.447 回答
-2

手动移植代码,您将学习 C++。:D

于 2017-10-25T17:20:13.410 回答