posts - 62,  comments - 19,  trackbacks - 0

十年 MFC 经历认识的 Microsoft 技术

孙辉

 


 

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

初识 MFC  
       
我最初知道 MFC 大概是在 1993 年,那个时候 Visual  C++ 还没面世,当时 Microsoft C++ 编译器还很弱,官方的名字是 Microsoft  C/C++  7.0 MFC 的版本是 1.0 ,几乎没有引起什么反响,那个时期最好的 C++ 开发环境是 Borland  C++  3.1 ,其实,大概是 1992 11 月份,一个偶然的机会,我领略到 Borland 公司的厉害,记不得在什么地方,我看到一个绝妙的集成开发环境,即 Turbo  C++  3.0  for  Windows ,这是我记忆中第一个真正的 Windows 环境下的 C++ 集成开发环境,那种激动的感觉至今仍记忆犹新,不客气的说,当时至少在 C++ 方面, Microsoft Borland 不是一个水平的, Borland 明显的要高于 Microsoft   Borland 的产品在技术上给我留下深刻的印象。那个时候 Microsoft 最好的开发平台是 Visual  Basic  3.0 ,而 Borland Delphi 正处于开发阶段( 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  C C++  Builder ,我深刻的体验到 Borland 的辉煌和无奈, Delphi VB  Killer 走到为 VB 护航(你可以想象 Delphi 一步到位的 ActiveX   控件开发技术有多牛,早期的 VB 有多土,早期的 VB 不能开发动态链接库,因此无法开发 ActiveX   控件,想起来真令人嘘唏不已), Borland  C++ 的命运也是不济。 Borland  C++  3.1 的辉煌永远不再了,十几年的开发工作中,我在 C++ 上投入了大量的精力, Borland  C++ 曾经给我带来无数的激动,然而这个经典的名字却在与 Microsoft 的竞争中渐渐的流逝了 ……  
MFC4.0
的出现,使得人们感觉 Microsoft C++ 方面赶上来了,这一版的 MFC Win95 推出后出现在 Visual  C++  4 中( Microsoft 没有 VC  3 VC4 以前的版本是 2.2 2.1 2.0 1.51 1.5 1.0 )。也许是对 Borland  C++ 的潜意识的失望,我不知不觉的接受了 MFC VC  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 还不存在。一开始,我始终潜意识在技术上对比 Microsoft Borland ,应当说技术上 Borland 不比 Microsoft 弱,即使现在也有人持有这个看法,可是为什么 Borland 走到今天这个地步?而 Microsoft 却如日中天?若干年前,这两个公司竞争何等激烈,而现在却是另一番 合作 的景象?可能很多人想过,如果 Borland 不存在,对 Microsoft 不是更有力吗?其实 Microsoft 可能精通中国历史,读过《三国》、十分了解战国时期的中国,其实 Borland 形式上的存在,对 Microsoft 是十分有利的,至少形式上还有竞争对手,而事实上 Borland 已经受控于 Microsoft Microsoft Borland 的大股东)。你可以看到一些微妙的现象: Borland Microsoft 提供了大量的人才,其中包括 Delphi 总设计师以及 Borland  C++ 编译器的核心成员;同时也为 Microsoft  .NET 提供强有力的护航服务(看看 C#  Builder Delphi  .NET )。 1998 Microsoft   COM 技术基本已经成熟,这个技术使人感到震撼,当时 Microsoft 的对手们提出 “OpenDoc” 用于对抗 “COM” ,你看看 “OpenDoc” 阵营的几个成员: IBM Apple Borland Novell ,你会感到这个阵营十分豪华、强大。但结果却差强人意, “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” 。从科学概念角度上分析 COM Java ,可能 COM 更全面、精确,从实现的成熟度上 Java 可能更成熟,可是你看到, Microsoft 正在不紧不慢的追赶。 Microsoft 令人联想起战国时期的强秦。    
战国时期的秦国,采取 远交近攻 ”“ 抚弱掠强 等措施傲视六国,今天的 Microsoft 也是这样, VB1.0 时, Microsoft 推出 “VBX” 控件技术,众多的小公司得以生存, Microsoft 自己不开发 “VBX” 组件,同样 “VBX” 进化为 “OCX” 时, Microsoft 并不十分强大,可是这种试探得到众多小公司的响应。 1997 Microsoft  Office  97 1998 Microsoft 推出 Visual  Studio  6.0 ,给众多中、小公司提供了生存、发展的机会,例如 Microsoft  Office  97 中集成了 Visual  Basic  for  Application  5.0 ,这项技术使得几百家软件开发商与 Microsoft 签署了 VBA 技术许可协议,即使 AutoDesk 这样的公司都与 Microsoft 签署了这个协议,这个协议使得每个集成 VBA 的产品的给个用户许可为 Microsoft 40$ 的许可费,如果你了解 VSIP Visual  Studio  Integration  Protocol )协议,以及有多少公司签订了 VSIP 协议,你就真正感觉到 Microsoft 的可怕; Microsoft  Office  97 Visual  Studio  6.0 的用户界面十分漂亮,为什么 Microsoft 自己的开发工具不提供类似的软件组件?你看到众多第三方的 Microsoft 盟友纷纷推出自己的界面库以模仿 Microsoft ,他们不会反对 Microsoft ,因为他们已经形成了使得 Microsoft 以及这些公司得以生存的生态圈。  
    Microsoft
的技术储备有多少, Microsoft 之外的人很难说清楚, Microsoft 中国公司也未必了解多少, 1999 WTL 类库刚刚出现的时候,人们就希望 WTL 能得到官方的支持,或授权给一个 Microsoft 之外的一个公司(你能想象出 Borland  C++  5.0 内置的 ActiveX 开发机制是基于 Microsoft  ATL 类库吗?),直到今天, WTL 依然如故,我们完全相信,如果 Microsoft 强力推广 WTL WTL 完全可以流行,可是 Microsoft 不缺类似的技术,类似的类库还有 BCL(Base  Control  Library ,一个用于开发轻量级 ActiveX 控件的类库 ) Microsoft 还有一个基于 ATL 的类库,这个类库用于开发 ActiveX  Designer ActiveX  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 的风格,因为你知道,即使是一个 DOS Microsoft 都要提供一个内置的 QBasic GW  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 几乎所有的产品是息息相关的, Windows Office Visual  Studio  .NET 虽然各不相同,但公共的核心即将形成,我们已经看到,核心组件方面, Office Visual  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 推出后不久,迎来了 Win95 Borland 仓促上阵,以一个小的 “Pack” 使得 BC4 可以编译基于 Win4 的程序,当时的 Visual  C++ 2.0 版,支持 Window16 的版本为 Visual  C++1.51 ,有意思的是 Borland 可以用同一个编译器同时支持 Win16 Win32 ,而 Microsoft 却不得不为 Win16 Win32 提供不同的编译器。然而,非正式版本的 Visual  C++  2.1 Visual  C++  2.2 却悄悄地支持了 Win95 的最新特征,即 Win95 新提供的一组公共控件,在我的印象中, Borland Win95 新特征的支持不利使得 MFC OWL 的距离极大的缩短了。稍后到来的 Borland  C++  4.5 没有改变这个状况,尽管 Borland  C++  5.0 同时支持 OWL MFC ,可是败象已经显露, Borland  C++ 非常遗憾的只走到了 5.5 版。 C++  Builder 虽然形式上引入了 Delphi VCL 库,可是许多 C++ 程序员并不买账,因为许多以 C++ 为乐的人更喜欢以编辑的模式进行编码。 Visual  C++  4.0 的出现,在 C++ 这个战场上, Borland 开始落败了。  
       MFC
发展到今天,已经十多年了,尽管褒贬不一,但可以肯定,十几年的技术积累已经奠定了 MFC 的生存基础,即使 Microsoft 的长角发布, MFC 也不能推出 Windows 的舞台,事实上,长角( Longhorn )之后的 Visual  Studio  .NET 仍将 MFC 作为一个重要的组成部分,在今年的 Visual  Studio  .NET  2005 中, MFC C++ 中的位置依然如故。 MFC 的未来,应该不必担心,只要你深入考察 .NET 类库,你会发现, MFC 的许多思想机制正悄然进入 .NET ,与此同时, Microsoft 的第三方盟友十多年来已为 MFC 开发了大量的扩展库,如果 Microsoft 是船,第三方盟友就是载舟之水。许多人认为 MFC 不发展了,其实是一种错觉, Visual  C++  6 的界面十分经典,特别是其中的 Docking 控制条机制,其实 Visual  C++  6 IDE 完全就是 MFC 写的,可是 MFC 类库中控制条相关的类功能很弱,为什么?你会看到许多与 Microsoft 友好的公司,他们很快的在 MFC 基础上实现了 Visual  C++  6   Docking 机制,这就是 Microsoft 的高明之处, Microsoft 很会给盟友提供机会,其一贯的做法就是在自己的商品化产品中预先提供一些有趣的特征,使得其他一些公司进行模仿以带动用户群体。 Borland 不具备这样的储备。 MFC 第三方市场的繁荣,得益于 Microsoft 的策略与明智。 MFC 可否跨平台?理论上完全可以, Microsoft 不做,也是策略,但是有许多重要的产品 Microsoft 却默许 MFC 移植到其他平台,事实上, Microsoft 的合作伙伴之一 Mainsoft 公司( Windows 源码就是从这家公司流失的),几年来就是负责移植 MFC 程序移植到 UINIX Linux AIX 等操作系统之上。  
       
新版的 Visual  C++ MFC 已经支持 .NET 开发了, MFC ATL 的协作更好了。根据我的经验, MFC ATL .NET 库三者完全可以融合在一起综合应用到实际的开发工作中去,如果你是 MFC 行家,我希望 ATL .NET 库能成为你的忠实的左右手。那么有没有同时支持 MFC ATL .NET 库的程序?当然有, Visual  Studio  .NET  IDE 就是!而且 Visual  Studio  .NET  IDE 还支持用 ATL .NET 库扩展的 Addin



下面仍然有很多,但是不再转载:http://blog.csdn.net/sunhui/archive/2005/03/15/319551.aspx

posted on 2006-12-30 13:50 乔栋 阅读(257) 评论(0)  编辑 收藏 引用 所属分类: C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜


My blog is worth $0.00.
How much is your blog worth?