我必须执行需要将 Borland C++ 代码迁移到 C# 的项目,我需要遵循哪些重要步骤才能顺利迁移代码?请提出任何提示和技巧?
3 回答
这实际上意味着完全重写。如果我是你,我会尝试 C++/CLI 而不是 C#。这样,您可以逐渐重写代码并将其转换为托管代码。
需要考虑的事项,无论您是迁移到 C# 还是 C++/CLI:
- 将您的软件划分为具有干净接口的模块(使用 n 层架构、MVC 等)。如果每个分区都是一个 COM 对象,您甚至可以尝试仅迁移部分并在 .NET 中使用 COM 对象。
- 确定您依赖的库并检查如何在 .NET 中替换它们
- 确定在何处使用指针并检查如何在 C++ 中转换此代码
- 检查您在哪里使用 RAII 对象并找到在 .NET 中获得相同结果的方法。
我无法为您提供更详细的建议,因为我不知道您要迁移哪种类型的程序以及出于什么原因。
不过,这并不是真正的代码迁移,是吗?您所做的实际上是用语言 b (C#) 重写以语言 a(在本例中为 C++)中存在的系统。这两种语言没有太多共同点,无法进行简单的机械翻译(C# <-> Java 更容易机械翻译),并且根据 C++ 代码的现代程度,您可能无法翻译某些习语直接地。
对于一个合理规模的项目,我的方法是用一种允许简单文本处理的语言编写一个“交叉编译器”(我上次使用 ruby)。这个交叉编译器应该能够将大约 80% 的代码机械地翻译成几乎可以用目标语言编译的东西。这还允许您识别需要(大量)程序员关注的代码区域,因为您必须使用现有代码并在 C# 中编写功能等效的代码。不要忘记,对于这个翻译工具,您还需要编写代码,将头文件和实现文件中的必要代码位组合在一起。根据 C++ 代码的组织程度,这是一项非常重要的任务。
如果您只想迁移到 .NET,请考虑使用C++/CLI。如果您真的想迁移到 C#,那么我建议不要使用自动迁移路径,而是在迁移到 C++/CLI 之后,在 C# 中进行新开发,并计划将现有代码从 C++ 迁移到 C#一个健壮的测试环境来验证随着时间的推移所做的更改。
但是,如果您只是必须进行大规模迁移,那么您可以考虑移植到 C++/CLI 以构建托管程序集并使用一种 disassmble-IL-to-C# 工具来自动化该过程。我强烈反对这样做——但这是你的时间和项目,而不是我的。