gpt4 book ai didi

c# - 在将遗留 C++ 组件之一转换为 C# 时需要建议

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:34 26 4
gpt4 key购买 nike

目前,我们正在处理一个 C++ 遗留代码库,它由几个软件组件组成。

其中一个组件是以极难维护的方式编写的。 (例如,内存分配是在 X 地方完成的,但内存释放是在 Y 地方完成的。这使内存管理成为一项痛苦的工作)。到目前为止,我们能够解决(或解决)所有内存泄漏问题。

但是,经过几轮错误修复后,我们的感觉是,由于该软件组件的维护成本很高,我们不能离当前的里程碑太远。

我知道重写源代码可能不好:http://www.joelonsoftware.com/articles/fog0000000069.html

但是,与其重构当前代码,不如从头开始重写更好

  • 到目前为止,团队中没有人能够完全理解该软件组件代码。
  • 遗留软件组件是一小部分软件。我猜 2 万行
  • 我们的团队非常清楚需求和我们想要实现的目标

因此,我们计划采用托管代码,至少使内存管理成为一项轻松的工作。我们打算选择C#,因为

  • 我们所有的 C++ 代码都是使用 Microsoft VC++ 编译的
  • 我们在其他软件组件中使用 MFC。 (以 DLL 形式)每个 DLL 都有自己的资源。

我有C++和Java背景,对C#一窍不通。

  1. C# 与 MFC DLL 的交互效果如何,其中一些 DLL 函数将调用 MFC GUI?
  2. 有什么需要注意的吗?
  3. 如果我们使用托管 C++,与遗留 C++ DLL 的接口(interface)是否会更容易?

谢谢。

最佳答案

我处于类似的情况,我也做了一些混合 C++ 和 C# 的实验。然而,我的应用程序中的问题是:

  • 应用程序没有明确划分为不同的模块,因此很难将特定模块从 C++ 迁移到 C#
  • 该应用程序非常占用 CPU,实验表明从 C++ 到 C# 或从 C# 到 C++ 的调用开销很大

此外,您不能直接从 native /非托管 C++ 调用 C#,这意味着我必须引入一个额外的中间 C++/CLI(或者称为 C++.Net?)层。

因此,我选择不迁移到 C#,而是继续使用 C++。

因此,如果您想从 C++ 迁移到 C#,请确保:

  • 你有明确分离的模块
  • 从 C++ 到 C# 的转换(调用)或从 C++ 到 C# 的转换(调用)发生在不经常使用的地方(因此不在 cpu 密集型任务期间)

此外,请记住,如果您不是项目的唯一开发人员,那么您的所有(或大多数)开发人员也应该学习 C#。您不想将所有 C# 代码委托(delegate)给最近的初级开发人员,因为如果他离开,您将(或可能)遇到麻烦。

关于c# - 在将遗留 C++ 组件之一转换为 C# 时需要建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3176056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com