1

我必须执行需要将 Borland C++ 代码迁移到 C# 的项目,我需要遵循哪些重要步骤才能顺利迁移代码?请提出任何提示和技巧?

4

3 回答 3

3

这实际上意味着完全重写。如果我是你,我会尝试 C++/CLI 而不是 C#。这样,您可以逐渐重写代码并将其转换为托管代码。

需要考虑的事项,无论您是迁移到 C# 还是 C++/CLI:

  1. 将您的软件划分为具有干净接口的模块(使用 n 层架构、MVC 等)。如果每个分区都是一个 COM 对象,您甚至可以尝试仅迁移部分并在 .NET 中使用 COM 对象。
  2. 确定您依赖的库并检查如何在 .NET 中替换它们
  3. 确定在何处使用指针并检查如何在 C++ 中转换此代码
  4. 检查您在哪里使用 RAII 对象并找到在 .NET 中获得相同结果的方法。

我无法为您提供更详细的建议,因为我不知道您要迁移哪种类型的程序以及出于什么原因。

于 2009-06-17T06:11:34.000 回答
1

不过,这并不是真正的代码迁移,是吗?您所做的实际上是用语言 b (C#) 重写以语言 a(在本例中为 C++)中存在的系统。这两种语言没有太多共同点,无法进行简单的机械翻译(C# <-> Java 更容易机械翻译),并且根据 C++ 代码的现代程度,您可能无法翻译某些习语直接地。

对于一个合理规模的项目,我的方法是用一种允许简单文本处理的语言编写一个“交叉编译器”(我上次使用 ruby​​)。这个交叉编译器应该能够将大约 80% 的代码机械地翻译成几乎可以用目标语言编译的东西。这还允许您识别需要(大量)程序员关注的代码区域,因为您必须使用现有代码并在 C# 中编写功能等效的代码。不要忘记,对于这个翻译工具,您还需要编写代码,将头文件和实现文件中的必要代码位组合在一起。根据 C++ 代码的组织程度,这是一项非常重要的任务。

于 2009-06-17T06:07:27.030 回答
1

如果您只想迁移到 .NET,请考虑使用C++/CLI。如果您真的想迁移到 C#,那么我建议不要使用自动迁移路径,而是在迁移到 C++/CLI 之后,在 C# 中进行新开发,并计划将现有代码从 C++ 迁移到 C#一个健壮的测试环境来验证随着时间的推移所做的更改。

但是,如果您只是必须进行大规模迁移,那么您可以考虑移植到 C++/CLI 以构建托管程序集并使用一种 disassmble-IL-to-C# 工具来自动化该过程。我强烈反对这样做——但这是你的时间和项目,而不是我的。

于 2009-06-17T06:13:55.367 回答