我如何决定是否将ATL,MFC,Win32或CLR用于新的C ++项目?

我刚刚开始我的第一个C ++项目。 我正在使用Visual Studio 2008 。 这是一个单一窗体的Windows应用程序,用于访问几个数据库并启动WebSphere MQ事务。 我基本上理解ATL,MFC,Win32(我实际上对此有点朦胧)和CLR之间的区别,但是我对如何select我却不知所措。

是否有一个或多个这些为了向后兼容?

CLR 是一个坏主意吗?

任何build议感激。

编辑:我已经selectC ++这个项目,因为我没有在post中进入,这不完全是技术性的。 所以, 假设 C ++是唯一的/最好的select,我应该select哪一个?

这取决于你的需求。

使用CLR将为您提供最具performance力的库集(整个.NET框架),代价是限制您的可执行文件需要在运行时安装.NET框架,并限制您到Windows平台然而,所有4种上市技术都只是Windows,所以平台限制可能是最麻烦的)。

但是,CLR要求您使用C ++语言的C ++ / CLI扩展,所以您必须学习一些额外的语言function才能使用它。 这样做会给你许多额外的东西,比如访问.net库,完整的垃圾回收等等。

ATL和MFC之间有点棘手。 我会引用你到MSDN的页面来select它们之间的决定。 ATL / MFC的好处在于你不需要.NET框架,只需要安装VC / MFC运行时即可部署。

使用Win32直接提供最小的可执行文件,具有最less的依赖关系,但更多的工作要写。 你有最less的辅助库,所以你正在写更多的代码。

Win32是原始的,裸机的方式。 这是乏味的,难以使用,并有很多细节,你需要记住,否则事情会以相对神秘的方式失败。

MFC构build于Win32上,为您提供了一种构build应用程序的面向对象方法。 这不是Win32的替代品,而是一个增强 – 它为你做了很多艰苦的工作。

System.Windows.Forms(我认为你的意思是CLR)是完全不同的,但是与MFC的基本结构有很大的相似之处。 这是迄今为止最容易使用的,但需要.NET框架,这可能会或可能不会成为你的情况的障碍。

我的build议是:如果您需要避免使用.NET,那么使用MFC,否则使用.NET(事实上,在这种情况下,我会使用C#,因为使用起来更容易)。

至于C ++去,我会使用WTL。 这是轻而易举的,你将有几个(如果有的话)依赖关系,使其易于运输和安装。 当我的应用程序包含一个可以在大多数Windows版本上运行的单个EXE时,我感到非常满意,但这可能不是您的问题。

如果你select去.NET,那么C#几乎肯定是要走的路。

更多WTL在这里:

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

我会很好奇为什么你会用C ++来做这件事。 根据您的简要描述,C#听起来像是一个更合适的select。

只是要详细说明一下,看看你给出的描述C ++ CLR的链接。 评分最高的答案笔记(准确地说,在我看来)C ++适合于“内核,游戏,高性能和服务器应用程序” – 其中没有一个似乎描述了你在做什么。

MFC,ATL等将被支持,是的,你可以在未来版本的Visual Studio上编译你的应用程序,并在未来版本的Windows上运行它们。 但是他们不支持这样的意思,那就是在CLR和C#中没有太多新的开发在API或者语言中进行。

CLR没有错。 像其他人一样,我build议C#,但是因为你有坚持使用C ++的理由,那么使用.NET框架比使用ATL / MFC搞乱几千倍,如果你不熟悉它们(IMO)。

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