十年
MFC
經歷認識的
Microsoft
技術
孫輝
?
?
自從
初識
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
提供整個網站內容下載服務,大約
???
有人說
“COM”
沒落了,那么就太不了解
Microsoft
了。在與
“OpenDoc”
的競爭中,
“COM”
是個徹底的勝利者,在與
“Java”
的競爭中,
“COM”
成功的進化了,在這個過程中
Microsoft
體現了強大的吸收能力、以及無法想象的韌勁。
.NET
只不過是
COM
的
“
別名
”
而已。對于一個經驗豐富的
C++
程序員而言,
.NET
就是
COM
的進化,而
Microsoft
內部
.NET
就是
“COM ?
戰國時期的秦國,采取
“
遠交近攻
”“
撫弱掠強
”
等措施傲視六國,今天的
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