如何确定对新的C ++项目使用ATL,MFC,Win32还是CLR?


73

我刚刚开始我的第一个C ++项目。我正在使用Visual Studio 2008。这是一个单格式的Windows应用程序,它访问几个数据库并启动WebSphere MQ事务。我基本上了解ATL,MFC,Win32(实际上我对此不太了解)和CLR之间的区别,但是我对应该如何选择感到困惑。

是否有其中一个或多个用于向后兼容?

CLR是个坏主意吗?

任何建议表示赞赏。

编辑: 出于这个原因,我选择了C ++是出于我没有在帖子中讨论的原因,而这并不是完全技术性的。因此,假设C ++是唯一/最佳选择,那我应该选择哪个呢?

Answers:


71

这取决于您的需求。

使用CLR将为您提供最具表现力的库集(整个.NET框架),但代价是将可执行文件限制为要求在运行时安装.NET框架,并且将您限制为Windows平台(但是,所有列出的4种技术都仅是Windows,因此平台限制可能是最不麻烦的)。

但是,CLR要求您使用C ++语言的C ++ / CLI扩展,因此,从本质上讲,您需要学习一些其他语言功能才能使用它。这样做为您提供了许多“附加功能”,例如访问.net库,完整的垃圾收集等。

在ATL和MFC之间进行选择比较棘手。我希望您参考MSDN的页面进行选择,以便在它们之间做出决定。关于ATL / MFC的好处是,您不需要.NET框架,只需安装VC / MFC运行时即可进行部署。

使用Win32直接提供最小的可执行文件,具有最少的依赖关系,但是编写起来却更多。您的帮助程序库最少,因此您要编写更多的代码。


24

Win32是原始的,裸机的方法。它繁琐,难于使用,并且有很多小细节需要您记住,否则事情将以相对神秘的方式失败。

MFC以Win32为基础,为您提供了一种构建应用程序的面向对象的方法。它不是Win32的替代品,而是一项增强功能-它为您完成了许多艰苦的工作。

System.Windows.Forms(我假设您所说的CLR)完全不同,但从基本结构上与MFC有很大的相似之处。到目前为止,它是最容易使用的,但需要.NET框架,这可能会或可能不会妨碍您的情况。

我的建议:如果您需要避免使用.NET,请使用MFC,否则请使用.NET(实际上,在这种情况下,我会使用C#,因为它更容易使用)。


1
此评论仍然有效吗?
Janus Troelsen,

1
对于Visual Studio 2008,可能-现在已经十年了。如今,对于Windows,使用WPF会更好。
Arke

14

就C ++而言,我将使用WTL。它轻巧,几乎没有(如果有的话)依赖项,因此易于运输和安装。当我的应用程序包含一个可以在大多数Windows版本上运行的EXE时,我感到非常满意,但是您可能不必担心。

如果您选择使用.NET,那么C#几乎是肯定的选择。

有关WTL的更多信息,请参见:

http://www.codeproject.com/KB/wtl/wtl4mfc1.aspx


2
您还会使用WTL吗?2016年尚无提交。来源:SVN
Janus Troelsen,2016年

@JanusTroelsen我会的!最新版本2020年3月18日-版本10.1077!sourceforge.net/projects/wtl/files/WTL%2010/WTL%2010.0.10077
fabspro

8

我非常好奇为什么您会完全使用C ++做到这一点。根据您的简短描述,C#听起来是一个更合适的选择。

仅作详细说明,请看一下您提供的描述C ++ CLR的链接。评分最高的答案(我认为是正确的)是C ++适用于“内核,游戏,高性能和服务器应用程序”-似乎都没有一个描述您在做什么。

从某种意义上说,将支持MFC,ATL等,是的,您将能够在Visual Studio的未来版本中编译您的应用程序,并在Windows的未来版本中运行它们。但是从某种意义上说,它们不受支持,因为API或语言中没有像CLR和C#中一样进行大量新开发。


好问题。它是一个较大项目的一部分,其中包括出于遗留和与供应商相关的原因而必须用C ++编写的其他部分。这部分不具备要在C ++中,但因为有一些做其他部分,因为这部分是比较小的,我正打算做这一切在相同的语言。
John M Gant

如果您喜欢使用C#,但希望/需要使用C ++,则C ++ / CLI(/ clr)可以非常接近C#。主要区别在于语法上的一些次要之处,并且尝试避免使用标准C ++而不是CLI调用。确实没有理由避免这种情况。
里德·科普西2009年

这并不一定是一个糟糕的思考过程。但是,我仍然认为您最好的选择是使用C#,然后P / Invoke进入现有的库。如果您已经是MFC专家,并且这只是您的项目的一小部分,那么是的,继续使用C ++可能是有意义的。尽管即使在这种情况下,它也可能是一个很好的机会来利用.NET框架进行一些“练习”
克莱德(Clyde)2009年

1
@Clyde:我的经验是C ​​++互操作层比使用P / Invoke更好,并且更具表现力。如果您正在使用其他C ++代码,则我个人使用C ++ / CLI进行所有互操作。如果GUI层很大,我可能会使用C#-如果这是一个小项目,则可能会将整个内容保留在C ++ / CLI中。C ++与。#以及C#都可以很好地与.NET框架配合使用(在C ++中有几件事情要更难一些,但在使用.NET时,C ++中的某些事情比C#中的要容易得多)。
里德·科普西

4

CLR没有错。像这里的其他人一样,我建议使用C#,但是由于您有理由坚持使用C ++,因此,如果您还不熟悉ATL / MFC(IMO),那么使用.NET框架要比使用ATL / MFC容易数千倍。

值得一提的是,如果您使用的是C ++ / CLR,那么您根本就不会真正使用C ++。C ++ / CLR就像C#一样编译为CIL。我从来没有亲自使用过它,但我相信它的目的是允许您编译旧代码并使其易于用于新的.NET代码,而不是允许新代码与旧的C ++可执行文件一起使用。还有其他从.NET调用本机代码的方法,也许您应该探索一下。


如果必须使用.NET库,我宁愿用C#编写
Tuyen Pham 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.