十年
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++