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

5 c++ mfc visual-studio-2008

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

Aid*_*yan 4

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

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

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

  • 额外的加载层将添加到您的 .Exe 或 .Dll 中。您必须小心初始化的顺序,尤其是静态初始化的顺序。VS2005 的效果好多了,但仍然存在一些问题。我有一个 /clr DLL 项目无法正确卸载,但我无法找出原因。此类问题的症状之一是您在调试退出时无法获得内存泄漏检测转储。

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

  • 跨越托管本机阈值会对性能和调试产生影响。

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

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

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