跨平台Windows / OS X开发,具有大量现有代码库

时间:2011-04-22 19:56:47

标签: c++ macos mfc cross-platform

使用MFC和WinAPI以C ++编写的复杂应用程序有一个庞大的现有代码库需要移植到Mac OS X.理想的解决方案是在不同平台之间使用尽可能多的代码,特别是代码如业务逻辑。 GUI可能会有所不同,具体取决于跨平台GUI可用的好工具。有一些低级别的OS调用在不同平台上会有所不同。主要目标不是最终​​需要单独开发和维护的两个单独版本的软件。

我一直在关注Qt,但我很想知道其他的替代方案,以及人们过去如何解决这个问题。

  • 如果您要移植用MFC编写的现有应用程序,您会使用什么/如何使用?
  • 如果您可以在两个平台上从头开始项目,您会使用什么/如何做?

3 个答案:

答案 0 :(得分:6)

几年前我们不得不做出类似的决定,并决定选择Qt。该应用程序是Windows Forms / Managed C ++组合(我们没有跨平台要求),我们对一些ui工具包进行了评估,我们也考虑了Java。

如果您熟悉MFC,您可能会发现WxWidgets更“舒适”,因为它的对象结构更接近于此。这实际上是让我们使用它的原因。 Qt设计经过深思熟虑,更适合我们正在做的事情。 Java被遗弃作为一种选择,因为我们内部并没有太多的知识。

从头开始我会再次选择Qt(即使诺基亚正在进行一些事情)我仍然喜欢这个工具包。我们可能会考虑的选项,当我们第一次评估时(由于项目的可用性和限制)Mono,Adobe Air或纯粹的基于Web的应用程序时我们没有考虑这些选项。

答案 1 :(得分:3)

  

•如果您要移植用MFC编写的现有应用程序,您会使用什么/如何使用?

我会使用wxWidgets。它有很棒的文档,支持多个平台,并且已经有一段时间了。至于你的问题的 how 部分......我会用wxWidget调用替换所有MFC / Win32特定的调用。这是过分简化的事情,但实质上就是需要实现真正的多平台能力。

  

•如果您可以在两个平台上从头开始项目,您会使用什么/如何做?

我仍然会使用wxWidgets,因为我对它很熟悉。 Qt,是一个非常棒的框架,功能强大,拥有更大的用户群(猜测)。

我意识到还有其他框架,但是Qt& wxWidgets似乎是跨平台框架的领导者。我认为这两种选择都不会出错。

编辑:这个答案受我个人使用Visual C ++ 6编写的大型MFC应用程序的经验影响,使用wxWidgets来运行Linux。

答案 2 :(得分:2)

我会坚持使用任何平台的“原生”GUI。这需要将表示层分成两个子层:(1)使用具体Widget / Control类型的实际实现和(2)表示抽象层。这样,您可以在使用相同的表示逻辑的同时在每个平台上获得原生外观。

顺便说一句,即使在托管代码中也可以统一执行此操作,假设MonoMac确实按照承诺工作(没有尝试过,没有意愿并且需要遵循Mac-Mania)。这样你就可以为你的抽象演示文稿提供一个完全干净的CLR支持的代码,在Windows上绑定到WPF,在Mac上绑定到正确的CLR-AppKit包装器。