代码之家  ›  专栏  ›  技术社区  ›  John M Gant aman_novice

如何决定使用新的C++项目的ATL、MFC、Win32或CLR?

  •  65
  • John M Gant aman_novice  · 技术社区  · 15 年前

    我刚开始我的第一个C++项目。我在用 Visual Studio 2008 .它是一个单窗体的Windows应用程序,可以访问多个数据库并启动一个WebSphere MQ事务。我基本上理解ATL、MFC、Win32(实际上我对此有点模糊)和CLR之间的区别,但我对如何选择感到困惑。

    其中的一个或多个是为了向后兼容吗?

    是CLR吗 a bad idea ?

    感谢您的建议。

    编辑: 我之所以选择C++作为这个项目的原因,是因为我没有进入这个职位,这并不完全是技术性的。所以, 假设 C++是唯一的/最好的选择,我该选择哪一个?

    5 回复  |  直到 6 年前
        1
  •  66
  •   Reed Copsey    15 年前

    这取决于你的需要。

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

    然而,CLR要求您使用C++语言的C++/CLI扩展,因此,本质上,您需要学习一些额外的语言特性来使用它。这样做可以为您提供许多“额外功能”,例如访问.NET库、完全垃圾收集等。

    ATL&MFC在这两者之间的选择比较棘手。我建议你去 MSDN's page for choosing 为了在他们之间作出决定。ATL/MFC的好处在于,您不需要.NET框架,只需要安装VC/MFC运行时即可进行部署。

    直接使用win32可以提供最小的可执行文件,依赖性最小,但编写起来要做的工作更多。您有最少数量的助手库,所以您要编写更多的代码。

        2
  •  20
  •   Yoon5oo JBE    6 年前

    Win32是一种原始的、纯金属的方法。它很乏味,很难使用,而且有很多小细节需要你记住,否则事情会以相对神秘的方式失败。

    MFC基于Win32为您提供一种面向对象的构建应用程序的方法。它不是Win32的替代品,而是一种增强功能——它为您做了很多艰苦的工作。

    system.windows.forms(我假设您所说的clr)完全不同,但与MFC的基本结构有很大的相似之处。这是迄今为止最容易使用的,但需要.NET框架,这在您的情况下可能是或可能不是一个障碍。

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

        3
  •  13
  •   Rob    15 年前

    就C++而言,我将使用WTL。它是轻量级的,并且您几乎没有依赖性(如果有的话),这使得它易于装运和安装。当我的应用程序由一个可以在大多数Windows版本上运行的exe组成时,我发现它非常令人满意,但这可能不是你关心的问题。

    如果你选择去.NET,那么C几乎肯定是你的选择。

    更多关于WTL的信息:

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

        4
  •  8
  •   Ajay    8 年前

    我很好奇为什么你会在C++中这样做。根据你的简短描述,C听起来是一个更合适的选择。

    只是为了详细说明一下,看看你所描述的C++ CLR链接。最高级的答案注释(准确地说,我认为)C++适合于“内核、游戏、高性能和服务器应用程序”——没有一个能描述你在做什么。

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

        5
  •  4
  •   Patrick    15 年前

    clr没有什么问题。像这里的其他人一样,我建议C++,但是既然你坚持C++,那么使用.NETFramework比使用ATL/MFC容易得多几千倍,如果你还不熟悉它们的话。

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