c++ - 将 MFC/ATL 代码转换为 Windows 窗体应用程序

标签 c++ visual-studio-2008 mfc

我有大量的 MFC/ATL 程序代码,想在 Windows 窗体应用程序中使用。 “转换”此代码的最简单方法是什么,以便它在启用/clr 的情况下进行编译并找到基本类,例如CObject、CString、CFile 和模板?

最佳答案

不需要做太多的“转换”,您只需启用/clr 并编译即可。会有构建错误,但数量不会很大。

这是一个不应该轻易做出的决定。。一旦你越过/clr 阈值,你就牺牲了一些东西:

  • 构建性能变得更差,尤其是链接。您不能增量链接 C++/clr 项目。

  • 一个额外的加载层被添加到您的 .Exe 或 .Dll 中。您必须注意初始化的顺序,尤其是静态的。与 VS2005 相比,情况好多了,但仍有问题。我有一个无法正确卸载的/clr DLL 项目,我一直无法弄清楚原因。此类问题的一个症状是您无法在退出调试时获得内存泄漏检测转储。

  • 向项目添加功能时,您可以选择托管实现或 native 实现。如果您选择对项目中其他地方本地完成的事情进行管理,您必须选择,我是否去修改旧的实现?

  • 跨越托管原生阈值对性能和调试有影响。

  • 异常处理变得更加复杂。

我推荐一种更有针对性的方法,而不是在整个项目上打开/clr 开关。让您的大型图书馆保持原生。创建混合模式/clr Bootstrap /包装程序。这种“瘦代理”提供了访问本地库的好处,同时保持了本地库的稳定性和性能。

如果您的 native 库中有对话框(或更糟的是 SDI/MDI View ,请参阅 here),则连接显示器可能会很棘手。但这是值得的。

关于c++ - 将 MFC/ATL 代码转换为 Windows 窗体应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/658026/

相关文章:

java - 使用多个求和查找有序集的组合数

c++ - fstream 在不存在的文件上进出

c++ - sprintf 如何与 CString 和 std::string 一起工作

c++ - 如何在不将 MFC 链接为静态库的情况下消除 OpenCV 1.1 和 MFC 6.0 之间的内存泄漏

c++ - Linux 中的 gettimeofday 怪异行为

javascript - Visual Studio 2008 不在 JS 文件中显示我的 XML 注释

c# - 使用 OleDbConnection 连接

wpf - Microsoft Office 2010 使用 WPF 还是普通的旧 MFC?

c++ - 由 CreateEx() 创建的子窗口被兄弟窗口重叠

c++ - ifstream.open() 不打开文件