【问题标题】:Port to Linux, or write wrappers for MFC?移植到 Linux,或者为 MFC 编写包装器?
【发布时间】:2011-08-15 14:50:41
【问题描述】:

分离程序的核心功能并将其移植到 Linux 更容易,还是围绕 MFC 功能编写包装器以使原始 MFC 程序在 Linux 中运行更容易?

例子:

获取基于基本对话框的 MFC 应用程序(几个对话框窗口),让它在 Linux 命令行下运行,而无需修改核心分析代码。主要目标是不修改分析代码。考虑到这一点,编写程序的命令行版本,该程序使用 MFC 应用程序用于分析代码的相同文件。编写与分析代码中使用的 MFC 类和函数完全相同的代码。事实上,只需从这些类的 MFC 源代码开始,删除所有 Microsoft 特定的东西(MFC、ATL 等),然后将其用于您的包装器代码。

对比:

获取核心分析代码,将其插入 Qt 命令行项目。对于任何 MFC 或 Win32 功能,将其替换为来自 Qt 或 STL/Boost 的等效跨平台兼容功能。

【问题讨论】:

    标签: c++ qt mfc


    【解决方案1】:

    尝试针对 Winelib 编译它,您将不必重写大部分功能。

    鉴于您的 cmets,鉴于时间和资源,我肯定会将源代码分成明确定义的层:

    一个依赖于操作系统/平台的层,
    一个操作系统抽象层,
    一个独立于操作系统的中间件 &
    一个 UI 层

    这是在任何软件应用程序中都会遇到的最基本的分层架构。这样每当我需要将它移植到新的操作系统/平台时,我只需要写一个OS/platform dependent layer 并且我的所有其他层都保持不变。同样,当需要更改 UI 框架时,我可以轻松地修改 UI layer,堆栈的其余部分保持不变。

    当然,这样的解决方案需要您有足够的时间和资源,但一旦您这样做了,您未来的生活就会轻松得多。

    【讨论】:

    • 抱歉,我不能使用 Wine。我应该早点提到这一点。
    【解决方案2】:

    如果有足够的时间和资源,我会选择第二种方法,在我看来这是一种更简洁的方法。如果需要快速而肮脏的解决方案,您可以按照 @Als 的建议使用 Winelib。

    顺便说一句,Qt 和 STL/Boost 是多平台库,因此将来您可以将“移植”版本用作多平台版本,也可以将其部署在 Windows 上并摆脱 MFC 依赖(优势:只有一个要处理的代码库;缺点:Qt 是一个非常重的依赖项)。

    【讨论】:

    • 另外,我也根本无法使用 Qt。这肯定会减少开销。
    • 如果您完全放弃了 GUI,并且您需要的所有其他 MFC 功能在 Stdlib 或 Boost 中都有等效功能,那么您肯定会成功。但是恕我直言,重要的是分离分析核心代码并使其仅使用 Stdlib/Boost 功能,然后在每个平台上您可以在其上插入任何接口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多