将 MFC 类转换为 C++ 标准库

Posted

技术标签:

【中文标题】将 MFC 类转换为 C++ 标准库【英文标题】:Converting MFC classes to the C++ standard library 【发布时间】:2014-03-22 01:50:13 【问题描述】:

我会做一些研究,看看是否可以将基于 MFC 的 Windows 应用程序转换为基于 html5 浏览器的应用程序。但是,我想将一些非可视类保留在一个单独的库中,可以根据需要从浏览器调用或由其他应用程序使用。大多数情况下,这种非可视代码是使用字符串、集合等的 CObject 派生数据类。我对 C++ 标准库并不十分熟悉,是否可以将我现有的大部分代码发布到它而不会出现太多问题?另外,如果我想移植序列化代码,是否可以使用 Boost 序列化库之类的东西作为标准库的扩展?

是否有任何工具可以帮助进行此类转换并识别潜在问题?

【问题讨论】:

你想要做的并不是真正的“转换”,它更像是“从头开始重写,使用原始作为参考”。浏览器不运行 C++,它们运行 javascript。或者您是在谈论将这个非可视代码放在 Web 服务器上并使用 AJAX 从浏览器“调用”它? 是的,我打算重写可视化代码,我想将非可视化 C++ 代码放在服务器上。 你可以使用 Clang inside of Visual Studio 并将其输出(或 LLVM 输出,无论如何)与 emscripten 混合,让你的一些 C++ 代码在浏览器中“运行”。 我去看看,谢谢你的提示。 【参考方案1】:

当然可以用不同的 UI 技术替换应用程序的 UI 层。这究竟有多困难取决于现有应用程序架构中各层的分离程度(即,替换 MVC 应用程序的“V”比替换模型与表示逻辑混合的应用程序更容易)

将非可视 MFC 代码保存在单独的库(通常是 DLL)中很常见,但这通常意味着应用程序将继续是 MFC 应用程序。

您的帖子中提到了一些不寻常的事情:

    您正在谈论将桌面 UI (MFC) 替换为 Web UI(“HTML5”)。这仍然有些不寻常,除非您也正在过渡到 Web 应用程序,并将非可视代码放在服务器上。也就是说,如果您搜索“将 html5 用于桌面应用程序”,您会发现很多工具和讨论。对于某些应用程序,在浏览器的约束下编写 UI 仍然过于受限(例如,对***窗口管理和放置的限制等)。如果您的目标是拥有更便携的桌面应用程序,您可能需要研究桌面 UI 库(例如 Qt、wxWindows 等) 除了提供一些相同的通用数据结构外,C++ 标准库与 MFC 字符串和容器类有很大不同。 AFAIK 没有自动工具可以将 MFC 转换为 C++ 标准库。同样,如果您的目标是可移植性,这是一个明智的步骤,您可以围绕 C++ 实现编写一些包装类来帮助调整您的代码(尽管这可能是重新实现类甚至整个库的好机会。)

除了标准库之外,还可以考虑使用 Boost 库——它们是高质量的库,可以为您节省大量使用自己的库的时间。

【讨论】:

感谢您的详细回答。为了解决您提出的一些观点:现有模型代码大多独立于可视代码,因此希望这会使事情变得更容易。我确实想创建一个网络应用程序并将非可视代码放在服务器上,并可能在其他应用程序或网站中使用此非可视代码。总而言之,我知道这将是一项艰巨的工作,因此我对 Web 应用程序框架进行了一些研究——jQWidgets 似乎为前端提供了很多我想要的东西。 也感谢 cmets 关于 Boost 库和从 MFC 到 C++ 标准的迁移。这是进行更详细分析的有用起点。

以上是关于将 MFC 类转换为 C++ 标准库的主要内容,如果未能解决你的问题,请参考以下文章

mfc中,如何将CString 转换成 string

c++标准库都有哪些?

c++ 标准库函数都有哪些?

C++标准库异常类

是否允许 C++ 标准库实现加强 noexcept 规范?

C++--标准库 字符串类