关于ATL MFC CLR VCL WPF WCF WWF CLX QT略谈

2013-06-19  金城  5316

如果不是搞编程开发的就不要看了,编程基础薄弱的可以暂时收藏一下。

如果不是搞VC++或DELPHI/CB的也可以跳过。

如果只喜欢用DEV-CPP或code::Blocks开发一些时尚前沿的小应用也可以跳过。

ATL,MFC,CLR,WPF,WCF,WWF是微软的东西。

VCL,CLX是Borland(美国宝兰公司)的东西。(当然现在delphi,cb都转给了Embarcadero<英巴卡迪诺 或叫 易博龙>)

QT是由奇趣科技开发的跨平台C++图形界面框架,在Linux平台下相当有名。是诺基亚旗下的编程语言工具。

初学者可能在这方便犯晕,一开始不知道是干什么的,再来就是不知道该重点学那个了。

这里略谈一下,仅为了帮助初学搭桥牵线,理清头绪。

提示一下

不要为哪个好哪个坏,哪个强大哪个弱小等争得跟血海深仇似的。好多初学都是看骂热闹弄晕的。其一是萝卜白菜,各有所爱。其二如同 斧钺刀叉 枪戟剑棍 都是武器,给自己装备自己适合的才能发挥实效。芊芊女子配大锤 -- 抡起来费劲。赛李逵耍起绣花针-- 比较变态。

ATL,CLR,MFC是在VC++里用的东西。

WPF,WCF是在C#和VB里用的。

VCL,CLX是delphi或CB里用的。

QT在手机程序中多见,CLX的底层是基于QT类库的。

ATL和MFC都可以开发COM。以前开发COM用的是传统的COM SDK。用上了ATL或MFC开发COM后,就省了太多手工打造COM的麻烦了,COM开发自动化得以实现。ATL较MFC则更彻底的支持COM开发。ATL的基本目标就是使COM应用开发尽可能地自动化,这个基本目标就决定了ATL只面向COM开发提供支持。目标的明确使ATL对COM技术的支持达到淋漓尽致的地步。MFC开发COM则显得代码冗余并且难着边际。

关于ATL简略的一句话:ATL就是开发COM的。

MFC和.Net Framework都是将WinAPI进行封装。只不过是体现形式不一样而已。好比 winapi 对应于 JavaScript,则MFC和.NetFramework则对应于 Prototype和JQuery一样。

VCL类似MFC,都是封装WinAPI,用于简化生产并且增强功能。不过VCL提供很多伪API,名称同WinAPI但另写代码实现相同功能。于是VCL的平台无关性要强一些。

微软的Win32就是纯WinAPI兑出来的。Win32最底层,性能通常最好。MFC是WinAPI的简单封装,CLR相当于JAVA VM(虚拟机),是.NET Framwork的主要执行引擎。.NET Framwork则是WinAPI的华丽封装。

MFC、ATL和CLR是VC2005内置的3大库,涵盖了windows的各种开发方法和开发应用。当然关于C++开发

的库不止这3个,不过这3个是微软推荐。从编程所处层次而言,WIN32为最底层,其次是MFC.然后是CLR.

WIN32 winAPI MFC MFC 类库 CLR .net库

1. WIN32常规就是不用MFC,使用API函数编的程序。Win32不需要图形界面,最简单的C程序就可以编译运行。

2. MFC库有很多年的历史了,MFC是基于Windows API 的简单封装。其核心架构基于"Document/View"架构(20年前被认为很潮流的一种概念)和消息流动机制。这个库自从VC6开始到现在都没有多 大改动。MFC封装的范围包括GUI,IO,数据库,网络编程等等方面。但是很多系统开发必须的api都没有封装,这样开发者一般都在MFC的基础上自己 处理与业务相关的任务。事实上很多人用MFC只是利用其GUI部分的封装。这个库GUI处理的效率也并不是很高,有时候与UI处理相关的代码会占到整个项 目的一半甚至更多。总的来说,这是一个垂老的库,微软在10年以来,除了对MFC进行修修补补以外,没有进行大的改进或者更新。如果你问MFC还会活多 久?恩,这是个问题。如果有一天MFC不在了,微软在这个级别上并没有其他产品能够代替它。

MFC编程就是VC++的原有风格,直接编译到二进制代码,脱离.Net环境(不过需要MFC运行库)。运行速度快,可以进行一些比较内核的操作,还有什么COM之类的开发之类的。

3. CLR库是随着.Net Framework 2 和VS2005一起发布的库,其核心的实现和C#,VB.net 一样。都是基于公共语言运行库。.Net Framework封装了大量系统的api,以类库的形式提供给开发者。C++中的CLR库可以使用其中和本机代码有关的部分,目前C++还不能涉及到 asp.net部分。CLR库中的C++颠覆了很多标准C++的传统,甚至可以说,这里的C++不是C++,只是披着C++的皮干其他的事。这里的C++ 更像是C#或者类似的语言。所以这里不叫C++,而叫做C++/CLI,值得一提的是,有关C++/CLI的部分目前还没有被标准C++接受,最近微软有关C++/CLI标准化的提案被C++标准化委员会拒绝了。所以C++/CLI目前还是微软的一家之言。

CLR就是类似C#那样,转换为MSIL汇编再生成PE程序,程序是解释执行的,但是可以使用Windows Form、WPF、WCF等很高级的东西,编程也很简单(除了调用Win32 API和COM时麻烦一点)。但是程序运行时必须有.Net运行库。

4. ATL用于编写COM程序。ATL库貌似也年纪很大了,至少在我接触到VC的时候就有它的存在了。这个库可以追溯到COM组件,因为ATL的目的就是帮助 开发者更好的与COM交互。到底什么时候有COM这个东西的 ?我也不知道,我只知道COM是有16位版本的,在Windows升级到32位的时候COM也随着升级到了32位。COM就像一些封装好的类对象一样,通过封装系统的api,提供一些标准的方法来给你使用。所以系统中有什么组件,就可以在ATL中用什么方法 。所以ATL不止可以写ActiveX,也可以有window,也可以有其它。有时候有些微软发布的功能是只以COM组件的形式发布的,例如MSXML, 这时候MFC就不适合,是要ATL来处理的。但是ATL在处理UI这方面并不是很强,所以微软工程师有一个开源的UI 框架,叫做WTL,专门用来处理UI的。ATL库的缺点是,作为模板库,在出现错误的时候会比较麻烦,出错提示会牛头不对马嘴。

个性化界面用MFC来实现十分的烦琐,建议直接使用WPF来实现!

开发工作繁琐,涉及知识面广泛,更新换代不快也不慢。只要先 深入一门 其他 范范了解,足以谋生即可,没有必要放慢脚步左顾右盼。等你把“所有相关知识”了解之后,通常编码上却赶不上一线的新手,是时候可以转型了。