【问题标题】:Converting MFC/ATL code to Windows Form App将 MFC/ATL 代码转换为 Windows 窗体应用程序
【发布时间】:2010-10-14 01:39:00
【问题描述】:

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

【问题讨论】:

    标签: c++ visual-studio-2008 mfc


    【解决方案1】:

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

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

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

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

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

    • 超过托管本机阈值会影响性能和调试。

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

    与其在整个项目上翻转 /clr 开关,我推荐一种更有针对性的方法。让您的大型图书馆保持原生。创建混合模式 /clr bootstrapper / wrapper。这种“瘦代理”提供了访问本机库的好处,同时保持本机库的稳定性和性能。

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

    【讨论】:

    • 我自己在一个大型项目上弄乱了 /clr 标志,我会定义。同意将大部分本机代码分离到 DLL 中是可行的方法。
    【解决方案2】:

    VC++.net,如果我没记错的话,有一个新版本的 MFC。将项目转换为 VC.net 项目,然后慢慢将类转换为托管代码。这使您可以慢慢地重新设计所有内容,而不是重新编写所有内容的巨大跳跃。顺便说一句,如果您还没有使用 MVC 设计模式将接口与内部工作分开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      相关资源
      最近更新 更多