我有一个MFC / ATL程序的大量代码,我想在Windows窗体应用程序中使用它。什么是“转换”此代码的最简单方法,以便在启用/ clr的情况下编译并找到基本类,例如CObject,CString,CFile和模板?
答案 0 :(得分:3)
没有太多需要完成的“转换”,你可以启用/ clr和编译。会有构建错误,但数量不大。
这是一个应该不被轻视的决定。一旦超过/ clr阈值,就会牺牲一些东西:
构建性能变得更糟,尤其是链接。您无法逐步链接C ++ / clr项目。
您的.Exe或.Dll会添加额外的加载图层。您必须小心初始化的顺序,尤其是静态。这与VS2005相比有了更好的盯着,但仍有打嗝。我有一个/ clr DLL项目,没有正确卸载,我无法弄清楚原因。此类问题的一个症状是您没有从调试中退出内存泄漏检测dumpon。
向项目添加功能时,您可以选择托管或本机实现。如果您选择为项目中其他地方完成的事情进行管理,您必须选择,是否要修改旧版实施?
跨越托管原生阈值会影响性能和调试。
异常处理变得更加复杂。
我建议采用更具针对性的方法,而不是在整个项目上翻转/ clr开关。保持您的大型图书馆原生。创建一个混合模式/ clr引导程序/包装器。这个“瘦代理”提供了访问本机库的好处,同时保持了本机库的稳定性和性能。
如果您的本机库中有对话框(或者更糟糕的是SDI / MDI视图,请参阅here),那么连接显示器可能会非常棘手。但这是值得的。
答案 1 :(得分:0)
VC ++ .net,如果我没弄错的话有一个新版本的MFC。将项目转换为VC.net项目,然后将类慢慢转换为托管代码。这为您提供了一个改变,即慢慢重新设计所有内容,而不是重写一切。顺便说一句,如果你还没有从MVC设计模式的内部工作中分离界面。