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

我刚开始我的第一个C ++项目。 我使用Visual Studio 2008中它是一个单一形式的Windows应用程序访问的几个数据库,并启动一个WebSphere MQ事务。 我基本上了解ATL之间的差异,MFC,Win32的(我有点朦朦胧胧的,一个其实)和CLR,但我无所适从,以我应该如何选择。

是一个或一个以上的这些只是在那里向后兼容?

CLR是一个坏主意?

任何建议表示赞赏。

编辑:我选择C ++为这个项目的原因,我没有去成在后,这是不完全的技术。 因此 ,假设C ++是唯一/最好的选择,我应该选择哪个?

--------------解决方案-------------

这取决于你的需求。

使用CLR将为您提供最传神组库(整个.NET框架),在限制你的可执行文件要求.NET框架的成本在运行时为限制你在Windows平台(安装,以及然而,所有的4上市的技术仅仅是窗口,因此该平台的限制可能是最麻烦的)。

但是,CLR要求您使用C ++ / CLI扩展的C ++语言,所以你会在根本上,需要学习才能使用这个一些额外的语言特性。 这样做可以给你很多“额外”,如访问.NET库,完整垃圾回收等。

ATL和MFC是有点棘手的决定。 我想请您看看MSDN的页面选择,以便它们之间作出选择。 有关ATL / MFC的好处是,你不需要在.NET框架中,要安装部署只VC / MFC运行时。

使用Win32直接提供最小的可执行文件,用最少的依赖关系,但更多的工作来写。 你有最少的辅助库,让你写更多的代码。

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

MFC建立在Win32的为您提供构建应用程序的一个面向对象的方式。 这不是一个替代的Win32,而是增强 - 它给你很多的辛勤工作。

System.Windows.Forms的(这就是我假设你通过CLR的意思)是完全不同的,但其基本结构大的相似之处MFC。 这是迄今为止最容易使用,但需要.NET框架,这可能是也可能不是你的情况的障碍。

我的建议:如果你需要避免.NET,然后使用MFC,否则使用.NET(其实,在这种情况下我会使用C#,因为它更容易一起工作)。

至于C ++的推移,我会用WTL。 这是lightweght,你将有几个(如果有的话)的依赖关系,因此很容易运送和安装。 我觉得很满意,当我的应用程序由一个单一的EXE,它可以运行在大多数Windows版本,但是这可能不是一个问题给你。

如果你选择去.NET代替,那么C#是几乎可以肯定要走的路。

更多WTL这里:

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

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

只是为了详细一​​点,看你给描述了C ++ CLR的链接。 最精彩的答案笔记(准确的说,在我看来)C ++是合适的“内核,游戏,高性能和服务器应用程序”,其中没有一个似乎来形容自己在做什么。

MFC,ATL等会在,是的,你就可以编译你的应用程序上的Visual Studio的未来版本和未来版本的Windows上运行他们的意识得到支持。 但他们没有在这个意义上,有没有很多新的发展的API或语言以同样的方式出现在CLR和C#怎么回事支持。

没有什么错CLR。 像其他人一样在这里我建议C#,但你有原因用C ++坚持再使用.NET框架是比ATL容易搞乱数千次/如果你不熟悉他们(IMO)MFC。

这可能是值得一提的是,如果你使用的是C ++ / CLR那么你就没有真正使用C ++的。 C ++ / CLR编译为CIL就像C#。 我从来没有使用过自己,但我相信它的目的是让你编译遗留代码,使之容易获得新的.NET代码,而不是允许新的代码工作,旧的C ++可执行文件。 有两种调用从.NET这,也许,你应该探索本机代码的其他方法。

他想在C启动一个新项目++,HES好奇,想知道更多关于C ++的,反正我觉得MFC是不错的选择(不要使用CLR,因为如果你想使用,然后把它写在C#)

分类:C# 时间:2012-01-01 人气:0
本文关键词: WINAPI,MFC,C#,CLR,ATL
分享到:

相关文章

  • 我刚刚购买Office 2010时,我的订单#是CNL804304428,并将其下载,但随后采空而无法安装,所以我可以用它>我能做些什么? 2013-12-01

    我刚刚购买Office 2010时,我的订单#是CNL804304428,并将其下载,但随后停止,将无法安装,所以我可以用它>我能做些什么? 我有三重检查我的产品密钥(FPP),这是正确的. 我不知道为什么它不工作. 它说,入门处是点击到运行一样简单. 这意味着什么? 它不是为我工作,我不知道什么点击即可运行的. 我点击了这个词,希望它会启动,但事实并非如此. 请联系我回来,我可以上手. 我有工作,从亚当和夏娃ABT的时间做. 公元前4000年一直到我明确在2010年...我有11不间断的完整谱

  • SQL对称密钥,并从C#打开它, 2013-02-23

    我想通过一个对称密钥加密在SQL Server中的数据. 当用户通过Web表单提交的数据,我想对数据进行加密,使用我已经保存在SQL Server在我的对称密钥. 我试图找出如何做到这一点. 目前,我运行以下命令: USE myDb GO OPEN SYMMETRIC KEY myKey DECRYPTION BY CERTIFICATE myCert GO INSERT INTO [myDb].[dbo].[passData] ([userid] ,[passName] ,[passLogin

  • 使用SASS,你怎么式“#DIV1 IMG,#DIV2 IMG {高度:80px}”? 2014-07-27

    使用SASS,你怎么了风格 #box1 img, #anotherbox img { height: 80px } ? 难道用mixins的唯一途径? --------------解决方案------------- 一种方法是列出你的选择,就像你在CSS中这样做:但是这不是野蛮的方式来做到这一点,因为这些元素并不一定相互关联的,那么为什么他们属于一个整体? 他们只是碰巧有一些共同的风格. 清单在一起像这样工作正常,但稍微硬一点,你添加更多井然有序: #box1 img, #anotherbox

  • 如何使用电话:带*(星,星号)或#(井,磅)iOS上的? 2015-02-10

    我试图在最初与中有一个*电话URL的iphone打电话. 它正确地带来了电话对话,但是当你点击呼叫回落到Safari. <a href="tel:123*12">Test</a> --------------解决方案------------- 这从苹果的文件应该会有所帮助: 为了防止用户恶意重定向电话或更改电话或账户的行为,电话应用程序支持大多数,但不是全部,在电话方案的特殊字符. 特别是,如果一个URL包含*或#字符时,手机应用程序不尝试拨打相应的电话号码.

  • 当试图删除一个请求,接收一个(#200),由id V备份的实体不能由当前观众可以看到 2013-01-30

    我试图删除通知请求,每个:https://developers.facebook.com/docs/reference/dialogs/requests/#deleting 通过这样做: app_token = Koala::Facebook::OAuth.new(FB_APP_ID,FB_SECRET).get_app_access_token graph = Koala::Facebook::API.new(app_token) graph.delete_object("#{request_

  • 如何使用功能,每一个C#WinForm的,而不是粘贴 2012-03-18

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { { if (keyData == Keys.Escape) this.Close(); return base.ProcessCmdKey(ref msg, keyData); } } 我发现这个片段被ESC关闭窗口形式. 我真的想实现这每一个窗口的形式. 我尝试创建一个从表继承了新的抽象类,另一个Windows窗体将继承这一块. 但它并不以这种方式工作.

  • C#和CLR功能混乱,有什么功能值得严格形容C#功能? 2014-07-02

    我有写C#,通常一块蛋糕几句话? 没有! 我已经通过各种互联网资源和书籍,我得到的是一种头痛的搜索. 例如垃圾收集一些消息来源说,这是C#的功能,其他的CLR得到这个功能和C#以及所有其他.NET语言有它在默认情况下. Ofcourse,我的投票对CLR,但也有很多能带来混乱,像避免显式代码转换其他的东西. 也许我得坏书和资源...所以也许有人会建议一些地方,以明确的方式说关于C# 第二件事是C#语法,再次几个选择并没有什么明确的,其他语言的组合相互笔者起源. C,C ++,Java中,这是确定

  • 如何内存管理,Java和C#有什么不同? 2014-06-01

    我读通过2010 CWE / SANS排名前25位最危险的编程错误和条目之一是缓冲区拷贝没有检查输入的大小 . 它建议使用与功能,以防止或减轻这个问题的语言,并说: 例如,许多语言执行自己的内存管理,如Java和Perl,不受缓冲区溢出. 其它语言,如阿达和C#,通常提供溢出保护,但保护可以由程序员被禁用. 我不知道,Java和C#不同以任何有意义的方式对于内存管理. 它怎么说,Java是不受缓冲区溢出,而C#只能防止溢出? ?它可以禁用这种保护在C#中? --------------解决方案-

  • 从C#转换算法,VB.NET失败 2012-04-09

    我想从C#下面的算法转换为VB.NET和VB.NET我有没有产生相同的结果,我的C#的算法,可有人告诉我在哪里,我在我的转换出了错? public static IEnumerable<T[]> Combinations<T>(this IEnumerable<T> elements, int k) { List<T[]> result = new List<T[]>(); // single combination if (k == 0) {

  • 的SharePoint - 客户端API - 无需NET,MFC / C ++? 2013-01-01

    难道一个SharePoint客户端API存在对于C ++,MFC用户? 有一个净额,但我更喜欢访问,而无需使用网. --------------解决方案------------- 没有C ++ API,但你可以通过C语言访问所有的WebServices ++,如果你真的想. 我猜托管C ++会更容易些,但.

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 10.332 (s). 10 q(s)