将 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++ 标准库的主要内容,如果未能解决你的问题,请参考以下文章