将程序移植到Linux,还是为MFC编写包装器?

3
更容易的方法是将程序的核心功能分离并移植到Linux,而不是编写包装器来使原始MFC程序在Linux上运行。例如,以基本的对话框为基础的MFC应用程序(多个对话框窗口),在Linux命令行下运行,而不修改核心分析代码。主要目标是不修改分析代码。考虑到这一点,编写一个命令行版本的程序,该程序使用MFC应用程序用于分析代码的相同文件。编写的代码将完全像在分析代码中使用的MFC类和函数一样工作。实际上,只需从这些类的MFC源代码中开始,剪切掉所有Microsoft特定的内容(如MFC、ATL等),并将其用于包装器代码。
相比之下,更改MFC或Win32功能为Qt或STL/Boost中的跨平台兼容功能,并将核心分析代码插入到Qt命令行项目中。
2个回答

4
尝试使用Winelib进行编译,就不需要重写大部分功能。
根据您的评论,在拥有时间和资源的情况下,我肯定会将源代码分成明确定义的层:
一个操作系统/平台相关层, 一个操作系统抽象层, 一个操作系统无关中间件, 一个UI层。
这是任何软件应用程序中最基本的分层架构。这样,每当我需要将其移植到新的操作系统/平台时,我只需要编写一个操作系统/平台相关层,而其他层保持不变。同样,当需要更改UI框架时,我可以轻松修改UI层,而其余的堆栈保持不变。
当然,这样的解决方案需要充足的时间和资源,但一旦拥有,未来的生活将变得更加轻松。

抱歉,我不能使用Wine来完成这个任务。我应该早点提到这一点。 - E.Freitas

1

如果有足够的时间和资源,我会选择第二个选项,因为它对我来说是一种更清晰的方法。如果需要快速而肮脏的解决方案,您可以遵循@Als的建议并使用Winelib。

顺便说一下,Qt和STL / Boost是多平台库,因此在将来,您可以使用“移植”版本作为多平台版本,在Windows上部署它并摆脱MFC依赖性(优点:只需一个代码库即可工作;缺点:Qt是相当沉重的依赖项)。


或者,我也可以完全不使用Qt。那肯定会减少开销。 - E.Freitas
1
如果你完全放弃了GUI,并且你所需的其他MFC功能在Stdlib或Boost中都有对应的替代品,那么你肯定能成功。但在我看来,重要的是将分析核心代码与Stdlib/Boost特性分离开来,然后在每个平台上都可以插入任何接口。 - Matteo Italia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接