繁体   English   中英

C++ 代码库从 MFC 重写为 *nix

[英]C++ codebase rewrite from MFC to *nix

我夏天在一家公司实习,我必须看看查看当前代码库(C++,MFC,大约 100K 行)和使用 state 机器到当前程序的不同方式。

我一直在阅读几篇论文,CPP2XMi 看起来可能有助于尝试构建序列图作为开始。

最终目标是评估从 microsoft 作为 O/S 转移的可行性,并研究 *nix 上的开发(可能是另一种语言)。

我还开始查看 MFC 依赖项,看看我们是否可以只移植当前的 C++ 代码。

我已经让程序通过 WINE 和性能方面运行,它似乎可以接受,但我仍然需要研究其他解决方案,因为这仅适用于 X86,而我们有其他解决方案在 MIPS 和 ARM 上运行。

我可以查看任何其他想法或警告吗?

我首先要看的是我在哪里使用 mfc 和其他非便携式的东西。 例如,如果 mfc 的唯一位置在接口层中,则可以隔离工作。

如果没有这样的分离,我会考虑创建一些独立且可移植的代码部分的可行性。 一旦你有了可移植性的基础,你就可以开始抽象由不可移植代码提供的所有服务。 从 MFC 到 Nix 的任何方式都是一个很大的变化,并且需要大量的工作。 另一种可能性是查看您是否可以在 windows 仿真器下运行它。

通过阅读wxWidgets的书,它似乎与 MFC 非常相似。 你可能会看看它。

我将首先查看 GUI 是否与应用程序的 rest 分离。 对于 MFC,这包括将CString等实用程序类的使用限制为仅限 GUI 代码。

如果以这种方式对代码进行了很好的分解,那么最简单的做法可能是单独保留 MFC GUI 代码,而只需使用为每个新平台选择的本机 GUI 库为您的其他平台构建一个新的 GUI。 这将为应用程序提供适当的本机外观和行为,这是其他任何方式都很难实现的。

如果应用程序逻辑与 GUI 代码混合在一起,那么现在是询问您是否可以投入资源来创建适当的分离的好时机,目标是在实现分离后执行上述操作。 从商业角度来看,这是有风险的,因为看起来您已经付出了很多努力,但最终还是回到了起点。 直到您开始在重构的应用程序上使用新的 GUI 时,您的发起人才会看到任何真正的进展。

您还可以查看可移植的 GUI 库,例如wxWidgetsQt

我已经为 MFC 和 wxWidgets 编程,它们在概念上非常相似。 我从来不需要将代码从一个移植到另一个,但我曾经将Borland 的 OWL移植到 MFC,这是一次类似的经历。 这种事情并不是特别难; 这只是一种磨砺。 只有当您有多种理由放弃旧的 GUI 库时,我才建议您这样做。 例如,也许您还考虑完全放弃 Visual C++,或者从 Professional 切换到 Express,从而失去对 MFC 的访问权限。 如果您打算坚持使用 VC++ Professional(或更高版本),则很难证明丢弃您的 MFC GUI 是合理的。

我曾经将一个大的 COM 库从 MFC 移植到可移植代码中。 我使用 STL 和boost替换所有 MFC 位。 例如, CString => std::string 和 VARIANT => boost::any

它花了很长时间,但主要是简单的替换和调整。 幸运的是,它没有任何 gui 代码——它是一个数据处理库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM