2006..奋斗奋斗再奋斗..

努力学习VC/MFC中,为实现4个现代化而努力.......

原创 十年MFC经历认识的Microsoft技术收藏

新一篇: 指针(翻译) | 旧一篇: CString 操作指南

自从200538日下午16“十年MFC经历认识的Microsoft技术”以帖子的方式发表于CSDN论坛后,引起了许多网友得好评,使得笔者诚惶诚恐,考虑到该贴过长(人气指数为5000),因此转移到Blog上,许多网友对此帖的评语只好省略,在此鄙人谢过了!为感谢网友的支持,本人希望今后能发出新的帖子以回报网友对我的鼓励,再一次谢谢!

初识MFC  
       
我最初知道MFC大概是在1993年,那个时候Visual  C++还没面世,当时MicrosoftC++编译器还很弱,官方的名字是Microsoft  C/C++  7.0MFC的版本是1.0,几乎没有引起什么反响,那个时期最好的C++开发环境是Borland  C++  3.1,其实,大概是199211月份,一个偶然的机会,我领略到Borland公司的厉害,记不得在什么地方,我看到一个绝妙的集成开发环境,即Turbo  C++  3.0  for  Windows,这是我记忆中第一个真正的Windows环境下的C++集成开发环境,那种激动的感觉至今仍记忆犹新,不客气的说,当时至少在C++方面,MicrosoftBorland不是一个水平的,Borland明显的要高于Microsoft  Borland的产品在技术上给我留下深刻的印象。那个时候Microsoft最好的开发平台是Visual  Basic  3.0,而BorlandDelphi正处于开发阶段(Delphi  的代码名称是:“VB  Killer”……,想起这些十几年前的往事,我不禁感慨万千。  
十几年来,我用过许多开发环境,关于Visual  Basic,我用过最早的DOS版本,Windows版的Visual  Basic我基本上全都用过,至今我还记得每个版本的VB安装盘磁盘的盘数。同样,我用过各个版本的Delphi,特别是Delphi  2.0,给我留下极好的印象。Delphi提供真正编译的可视化开发环境,那个时候(1994年左右),Delphi就可以开发带有GUI的动态链接库,你可以想象,在Microsoft  Access  2.0的应用程序中可以加载一个Delphi  Form并进行程序交互,那种感觉真是棒极了。  
    Borland  C++
是我心中无法抹掉的遗憾,从Turbo  CC++  Builder,我深刻的体验到Borland的辉煌和无奈,DelphiVB  Killer走到为VB护航(你可以想象Delphi一步到位的ActiveX  控件开发技术有多牛,早期的VB有多土,早期的VB不能开发动态链接库,因此无法开发ActiveX  控件,想起来真令人嘘唏不已),Borland  C++的命运也是不济。Borland  C++  3.1的辉煌永远不再了,十几年的开发工作中,我在C++上投入了大量的精力,Borland  C++曾经给我带来无数的激动,然而这个经典的名字却在与Microsoft的竞争中渐渐的流逝了……  
MFC4.0
的出现,使得人们感觉MicrosoftC++方面赶上来了,这一版的MFCWin95推出后出现在Visual  C++  4中(Microsoft没有VC  3VC4以前的版本是2.22.12.01.511.51.0)。也许是对Borland  C++的潜意识的失望,我不知不觉的接受了MFCVC  4.2推出时,我通过正常渠道购买了这个编译器的企业版。

 关于Microsoft  
       
关于Microsoft,有无数的人要对这个名字叙说感觉,这个令人讨厌的名字!不知道是喜欢还是憎恶,你是程序员,你的心思可能就要因Microsoft的存在而动,即使你用Linux,你可能也是因为Microsoft技术因素。多少年来,这个名字每天都出现在你、我、他的面前,因为你不得不面对Windows的存在,可是你憎恨这个名字吗?你讨厌这个名字吗?我不知道是否已经对这个名字麻木了。1998年我个人订了Microsoft  MSDN  Universal  版,我开始比较全面接触这个公司的开发技术,你可以想象,1998年当你面对上百张技术光盘的时候,你就知道什么叫做厚度,当我们有时说出赶上  “达到”Microsoft某些产品的水平的时候,可能我们缺乏对这个公司厚度的真实了解。进入MSDN,我感觉Microsoft简直不是一个公司,而是(或者正在形成)一个社会。当时著名的技术网站http://www.codeguru.com全部的技术资料是可下载的(那个时候http://www.codeguru.com提供整个网站内容下载服务,大约3M左右),大名鼎鼎的www.codeproject.com还不存在。一开始,我始终潜意识在技术上对比MicrosoftBorland,应当说技术上Borland不比Microsoft弱,即使现在也有人持有这个看法,可是为什么Borland走到今天这个地步?而Microsoft却如日中天?若干年前,这两个公司竞争何等激烈,而现在却是另一番合作的景象?可能很多人想过,如果Borland不存在,对Microsoft不是更有力吗?其实Microsoft可能精通中国历史,读过《三国》、十分了解战国时期的中国,其实Borland形式上的存在,对Microsoft是十分有利的,至少形式上还有竞争对手,而事实上Borland已经受控于MicrosoftMicrosoftBorland的大股东)。你可以看到一些微妙的现象:BorlandMicrosoft提供了大量的人才,其中包括Delphi总设计师以及Borland  C++编译器的核心成员;同时也为Microsoft  .NET提供强有力的护航服务(看看C#  BuilderDelphi  .NET)。1998Microsoft  COM技术基本已经成熟,这个技术使人感到震撼,当时Microsoft的对手们提出“OpenDoc”用于对抗“COM”,你看看“OpenDoc”阵营的几个成员:IBMAppleBorlandNovell,你会感到这个阵营十分豪华、强大。但结果却差强人意,“OpenDoc”无疾而终,而“COM”依然生机勃勃。  
   
有人说“COM”没落了,那么就太不了解Microsoft了。在与“OpenDoc”的竞争中,“COM”是个彻底的胜利者,在与“Java”的竞争中,“COM”成功的进化了,在这个过程中Microsoft体现了强大的吸收能力、以及无法想象的韧劲。.NET只不过是COM别名而已。对于一个经验丰富的C++程序员而言,.NET就是COM的进化,而Microsoft内部.NET就是“COM  3.0”OLE2就是COM  2.0),而“CLR”就是一个不择不扣的COM对象。曾经有人问我,既然牛顿时代就奠定了基础(想想著名的牛顿-莱布尼茨公式),几百年后的今天,数学还研究微积分吗?回答当然是依然在研究!微积分早期是针对函数的,现代微积分是针对流形(Manifold)、纤维丛(Fiber  Bundle的,概念深奥了,可是基本思想不变,只是微积分的思想得到合理的延拓与进化,你了解Microsoft吗?Microsoft  Research有一批超一流的数学家在为Microsoft工作,其中一些是斐尔兹奖的得主,Microsoft正在实现如同微积分进化到微分流形一样将“COM”进化到“.NET”。从科学概念角度上分析COMJava,可能COM更全面、精确,从实现的成熟度上Java可能更成熟,可是你看到,Microsoft正在不紧不慢的追赶。Microsoft令人联想起战国时期的强秦。    
战国时期的秦国,采取远交近攻”“抚弱掠强等措施傲视六国,今天的Microsoft也是这样,VB1.0时,Microsoft推出“VBX”控件技术,众多的小公司得以生存,Microsoft自己不开发“VBX”组件,同样“VBX”进化为“OCX”时,Microsoft并不十分强大,可是这种试探得到众多小公司的响应。1997Microsoft  Office  971998Microsoft推出Visual  Studio  6.0,给众多中、小公司提供了生存、发展的机会,例如Microsoft  Office  97中集成了Visual  Basic  for  Application  5.0,这项技术使得几百家软件开发商与Microsoft签署了VBA技术许可协议,即使AutoDesk这样的公司都与Microsoft签署了这个协议,这个协议使得每个集成VBA的产品的给个用户许可为Microsoft40$的许可费,如果你了解VSIPVisual  Studio  Integration  Protocol)协议,以及有多少公司签订了VSIP协议,你就真正感觉到Microsoft的可怕;Microsoft  Office  97Visual  Studio  6.0的用户界面十分漂亮,为什么Microsoft自己的开发工具不提供类似的软件组件?你看到众多第三方的Microsoft盟友纷纷推出自己的界面库以模仿Microsoft,他们不会反对Microsoft,因为他们已经形成了使得Microsoft以及这些公司得以生存的生态圈。  
    Microsoft
的技术储备有多少,Microsoft之外的人很难说清楚,Microsoft中国公司也未必了解多少,1999WTL类库刚刚出现的时候,人们就希望WTL能得到官方的支持,或授权给一个Microsoft之外的一个公司(你能想象出Borland  C++  5.0内置的ActiveX开发机制是基于Microsoft  ATL类库吗?),直到今天,WTL依然如故,我们完全相信,如果Microsoft强力推广WTLWTL完全可以流行,可是Microsoft不缺类似的技术,类似的类库还有BCL(Base  Control  Library,一个用于开发轻量级ActiveX控件的类库)Microsoft还有一个基于ATL的类库,这个类库用于开发ActiveX  DesignerActiveX  Designer是绝大多数程序员不了解得一类对象,如果你熟悉Office开发,你知道Office  VBA  中有一类对象,即Form2,此外VB6.0  中的报表设计器(以及著名的Active  Reporter),都属于此类对象,用这个类库,你可以为VB6.0以及集成VBA的系统提供定制化的可视化设计机制等等,如今ActiveX  Designer已经演化为集成于Visual  Studio  .NET中的设计器。

Microsoft学习  
       
无论从什么角度评价Microsoft,我觉得Microsoft是值得我们学习的,如果说生活在这个时代有Microsoft存在是一场灾难,你就应该痛恨这个家伙,但你首先要向这个家伙学习!我无意为Microsoft歌功颂德,我只是想说出十几年我对Microsoft技术的感受。  
       Microsoft
在研究式的开发中受益极大,如果你有兴趣,你可以访问http://research.microsoft.com/,虽然部分中国公司也有研究院,但与Microsoft相比,真有米粒之珠,也放光华?的感觉。2003年,我在北京的一个地方现场体验了Microsoft亚洲研究院的招聘会,我看到中国的精英们进入Microsoft的渴望,事实上,在中国大陆,Microsoft亚洲研究院的人力资源已经延伸到各著名高校的相关专业的核心层,我感到,Microsoft几乎不需要求贤,因为,只要Microsoft需要,精英们会蜂拥而至,每个人都有可以理解的理由而向往那个地方,如果为搞数学研究蜂拥到加州大学,我觉得可以理解,因为那里有数学土壤,出了成果国人也会感到自豪,因为科学无国界。技术是否有国界?不知道是否有定论?!想想DVD等技术专利给国内业界带来的灾难,不知道应不应该痛定思痛,在Microsoft校园招聘现场的气氛中,我似乎明白了为什么国人原创技术少得可怜。我读过几本Microsoft亚洲研究院的高手写的书,明显可以看出,Bill  gate  是他们的精神领袖以及他们对Microsoft的虔诚,国内的研究机构应当研究一下Microsoft的用人之道,Microsoft好像是三国里的人物,不知是刘备还是曹操,或者二者的混合物。我经常路过西格玛大厦,第一次西格玛大厦进入真有朝圣的感觉,也与Microsoft中国的几个层次的人打过交道,各中滋味实在一言难尽。  
       
Office大战中,国产软件的确在一些方面与Microsoft进行较量,其实给人的感觉很勉强,界面上的似是而非,或用户习惯方面的接近并不能解决根本的问题,一个好的软件开发人员必须是一个软件使用的高手,很难想象一个软件操作水平很拙劣的开发人员能开发出高水平的软件,我最早使用的软件之一就是Microsoft  Word,当时的版本是2.0,大概是1992年的事情,给我留下深刻印象的是集成于Word中的Word  Basic,后来,我接触到Excel  3.0,不出所料,Excel中集成的是Excel  Basic,后来使用的Access中自然内置Access  Basic  1.0,在这些软件集成捆绑成Office之前,我就感觉这些产品的构思十分了不起,很具有Microsoft的风格,因为你知道,即使是一个DOSMicrosoft都要提供一个内置的QBasicGW  Basic。虽然关于Microsoft的产品评论很多,作为一个技术人员,我认为Microsoft的产品构思绝对是第一流的,从1994年早期的Office系列到1997年形成的Office  4.2,我认为,技术构思上均领先于我国2002年以后的Office产品,你听说过如下说法吗?“Dos  作为操作系统的时代,Windows是应用软件;Windows是操作系统时,Office成为Dos时代的Windows;那么如果按此规律,Office会不会替代Windows而成为操作系统?,现在在开发领域Visual  Studio(  .NET)正在成为另一个Office,你注意到了吗?控制Visual  Studio(  .NET)集成开发环境的仍然是一个Basic语言引擎(Visual  Basic  .NET)。  
       
与许多公司不同的是,在技术体系上,Microsoft几乎所有的产品是息息相关的,WindowsOfficeVisual  Studio  .NET虽然各不相同,但公共的核心即将形成,我们已经看到,核心组件方面,OfficeVisual  Studio  .NET日渐趋于一致,例如Microsoft正在将Office  2003的核心组件VBA  6.X逐步用新的Visual  Studio  Tools  for  Office替代,而我们依然在一些似是而非的现象上与Microsoft的产品比较差距,国家采购或政府采购支持的公司,不去钻研核心技术,只是急功近利的采用短期行为急于与Microsoft相争,不知是否有蚍蜉撼树的感觉,个人的体验是,先学习Microsoft,踏踏实实的学,了解Microsoft,深入的了解,然后再喊口号。

为什么用MFC              
       
经过若干年的竞争,Borland  OWL几乎消失了,这个OWL是个非常漂亮的C++类库,在Borland  C++  3.1风光无限的年代,OWL真正的做到了独领风骚。然而,Borland  C++  4.0错过了进入32位程序的最佳时机,BC  4.0推出后不久,迎来了Win95Borland仓促上阵,以一个小的“Pack”使得BC4可以编译基于Win4的程序,当时的Visual  C++2.0版,支持Window16的版本为Visual  C++1.51,有意思的是Borland可以用同一个编译器同时支持Win16Win32,而Microsoft却不得不为Win16Win32提供不同的编译器。然而,非正式版本的Visual  C++  2.1Visual  C++  2.2却悄悄地支持了Win95的最新特征,即Win95新提供的一组公共控件,在我的印象中,BorlandWin95新特征的支持不利使得MFCOWL的距离极大的缩短了。稍后到来的Borland  C++  4.5没有改变这个状况,尽管Borland  C++  5.0同时支持OWLMFC,可是败象已经显露,Borland  C++非常遗憾的只走到了5.5版。