MFC是否仍用于新开发(具有任何材料量)?

NTD*_*DLS 26 lifecycle mfc frameworks visual-c++

我从未成为MFC的忠实粉丝,但这不是重点.我读到微软将于2010年发布一个新版本的MFC,这真让我感到奇怪 - 我认为MFC已经死了(没有恶意,我真的这么做了).

MFC用于新开发吗?如果是这样,那么好处是什么?我无法想象它对诸如C#之类的东西有任何好处(或者甚至只是使用Win32 API的c ++).

rer*_*run 24

使用MFC有很多代码.我一直看到这些问题仍然使用的是仍然使用的答案是肯定的.我在一个非常庞大的组织工作,仍然雇佣了数百名用cobol写作的人.如果曾经在企业中使用它,它将继续被使用,直到没有更多硬件来支持它,然后一些公司将付钱给某人编写模拟器,以便旧代码仍然有效.

海军仍然使用带有磁芯计算机的船只进行记忆,我相信他们有人可以使用它们.创建的技术永远不会得到支持.它是Deus ex machina的一个案例,大型组织并不完全确定他们的系统是做什么的,并且拥有如此强烈的恐惧感,让企业陷入困境,他们不想尝试新的技术(BTW)我们向IBM支付OS2上的尽力支持.

mfc也是一个完全可以接受的Windows开发解决方案,因为它是一个包装System API的对象模型,这几乎是大多数人从.net中获得的.


作为一个附录,由于这个问题可以获得赏金,这是MS关于VS 11中mfc的引用

在每个版本中,我们都需要平衡我们在产品各个领域的投资.但是,我们仍然认为MFC是用于构建本机桌面应用程序的功能最全面的库.我们完全致力于以高质量支持和维护MFC.以下是我们在MFC for Visual Studio 11中修复的一些问题的简短列表:

如果您想阅读完整的帖子,可以使用以下链接


Ha1*_*wed 18

Coolness并不考虑为新系统选择技术.是的,如果您是学生或想要在您身边玩耍,请选择您想要的任何内容.

但在现实世界中,每种技术都有优点和缺点.一年前,其中一个团队开始了一个新项目,决定它将在MFC中完成.原因很简单:他们必须使用windows api进行低级操作,打印机,Internet Explorer和上帝知道还有什么.

C#甚至没有在游戏中,MFC和QT之间做出了决定,两者都有所需的功能,两者都可以轻松集成低级功能,唯一的区别是一些团队成员已经拥有MFC经验,所以他们没有必须通过培训浪费时间和金钱.

让我们假设他们选择C#和WPF:
-1你必须将所有本机C++和ASM代码包装在DLL中(哎哟这可能很痛苦,而不是编写你写包装器的代码).
-1你现在可能需要两支球队,一支是ui支持winapi的球队.你不太可能发现很多人都能写出C#和winapi的东西.同意无论哪种方式你需要有人使界面漂亮(程序员通常很尴尬,他们花费更多)但至少只使用C++代码,两个团队之间没有更多的等待时间,需要ui修改,没问题我不要不得不等待ui设计师,他会很晚才这样做.
+1您可以在C#和WPF中编写UI代码,假设UI开发速度更快,但UI只是项目的1/4,因此总增益可能非常小.
-1性能下降:对于您在C#中无法执行的每个小操作,您调用外部DLL(这是一个小问题,因为程序在8GB RAM四核上运行).

总而言之:MFC仍然用于新开发,因为需求和成本决定了项目的技术,而MFC在某些情况下是最好的.

  • 嗯......非常好的解释!我想开始学习C++ GUI开发.我应该学习MFC还是QT?你说什么?我提供了赏金.请给我一个很好的建议,以获得接受.我可以将MFC/QT用于Dx/OpenGL游戏开发和数据驱动的应用程序吗? (3认同)
  • 一般来说,我发现Qt更多地使用MFC,因为它是跨平台和免费的.在一个项目中,我们在运行自定义Linux发行版的嵌入式设备上使用它.我从未将Dx/OpenGl与MFC或QT一起使用,但由于Dx/OpenGL只需要程序中的窗口,我认为没有理由不使用MFC和QT. (2认同)

Jer*_*fin 14

MFC仍然用于一些新的开发,以及大量的维护开发(包括微软内部).

虽然它可以是每分钟比直接使用Win32 API的速度较慢,性能损失确实是很小的-很少不亚于整个个百分点.使用.NET,性能的损失是相当大的情况下(在我的测试,很少低于10%,其中20-30%是典型的,和较高的仍然是繁重的计算,只需例如,我有一个程序,它的特征向量/特征值计算在相当大的阵列.我使用C++和MFC运行在一个测试用例原始版本只是根据我们的标准测试机器上一分钟.我的一些同事决定这将是很酷的C#重新实现它.他们的版本需要近3分钟在同一台机器上(四核,16 GB的RAM,所以没有,不是"传统"硬件).我承认我没有仔细查看他们的代码,所以也许它可以改进,但它们是体面的编码员所以3:1的改进让我觉得不太可能.

使用MFC,如果您愿意,也可以轻松绕过框架并直接使用Win32 API.使用.NET,您可以使用P/Invoke,但相比之下它非常痛苦.

  • 这有多少是由于GUI而造成的?据推测,你在两种情况下都使用像英特尔MKL这样的数学,那么究竟是什么导致了这种差异呢? (3认同)
  • @Pete:不,这个特殊程序在任何关键路径中都不使用外部代码.如果你原谅我听起来有点自负,英特尔的程序员擅长优化 - 但我会更好.更严重的是,很多英特尔的优化(偶然或其他)在AMD处理器上做得很差,这对于这个代码来说是不可接受的. (2认同)

Sha*_*aun 8

每个版本的Visual Studio都更新了MFC.它不是标题功能项目.

至于新的发展,是的.它仍在使用,并将继续如此(即使我,像你一样,不愿意).许多组织在几年前做出了技术决策,没有理由改变.

我确实认为你们正在谈论成熟的商店,人们更有兴趣保持/提高已经写好的东西而不是保持领先地位.


Sla*_*uma 8

在释放MFC功能包(一个或两年前,IIRC)是自10年左右MFC的最大延伸,它给了一个相当新的推动MFC开发.我想很多公司决定维护他们的遗留应用程序,推动他们前进,并在其基础上删除新的应用程序.

对我来说(作为必须维护大型MFC应用程序的人),更大的问题是(微软和第三方)组件而不是MFC本身的开发和支持的减少.例如,如果在应用程序中组装了许多旧的和不支持的纯32位Active-X组件,则移植到64位并不容易.