星期三, 九月 06, 2006

十年MFC经历认识的Microsoft技术.txt - TED Notepad

[webnote]
 
 
两全其美 BBS -- 主题文章阅读[C/C++/C# (C_Prog)][本篇全文][回复本文][回信给作者][本篇作者: babyfrog][本篇星级: 2][评价人数: 6]
发信人: babyfrog (极品青蛙), 信区: C_Prog
标  题: 十年MFC经历认识的Microsoft技术
发信站: 两全其美 BBS (Mon Mar 14 16:36:17 2005), 本站(lqqm.net)
 
发信人: cyberfx (复兴精神), 信区: VC
标  题: 十年MFC经历认识的Microsoft技术(zz)
发信站: 饮水思源 (2005年03月11日20:58:30 星期五)
 
十年MFC经历认识的Microsoft技术(zz)
 
一、初识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不是一个水平的,Bor
land明显的要高于Microsoft ,Borland的产品在技术上给我留下深刻的印象。那个
时候Microsoft最好的开发平台是Visual Basic 3.0,而Borland的Delphi正处于开
发阶段(Delphi 的代码名称是:"VB Killer")……,想起这些十几年前的往事
,我不禁感慨万千。
 
十几年来,我用过许多开发环境,关于Visual Basic,我用过最早的DOS版本,Win
dows版的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是Win9
5推出后出现在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年我个人订了 Mic
rosoft MSDN Universal 版,我开始比较全面接触这个公司的开发技术,你可以想
象,1998年当你面对上百张技术光盘的时候,你就知道什么叫做"厚度",当我们
有时说出"赶上"或 "达到"Microsoft某些产品的水平的时候,可能我们缺乏对
这个公司"厚度"的真实了解。进入MSDN,我感觉Microsoft简直不是一个"公司"
,而是(或者正在形成)一个"社会"。当时著名的技术网站http://www.codegur
u.com全部的技术资料是可下载的(那个时候 http://www.codeguru.com提供整个网
站内容下载服务,大约3M左右),大名鼎鼎的www.codeproject.com还不存在。一开
始,我始终潜意识在技术上对比Microsoft与Borland,应当说技术上Borland不比M
icrosoft弱,即使现在也有人持有这个看法,可是为什么Borland走到今天这个地步
?而Microsoft却如日中天?若干年前,这两个公司竞争何等激烈,而现在却是另一
番"合作"的景象?可能很多人想过,如果Borland不存在,对Microsoft不是更有
力吗?其实Microsoft可能精通中国历史,读过《三国》、十分了解战国时期的中国
,其实Borland形式上的存在,对Microsoft是十分有利的,至少形式上还有竞争对
手,而事实上Borland已经受控于 Microsoft(Microsoft是Borland的大股东)。你
可以看到一些微妙的现象:Borland为Microsoft提供了大量的人才,其中包括Delp
hi总设计师以及Borland C++编译器的核心成员;同时也为Microsoft .NET提供强有
力的护航服务(看看C# Builder、Delphi .NET)。1998年Microsoft 的COM技术基
本已经成熟,这个技术使人感到震撼,当时Microsoft的对手们提出"OpenDoc"用
于对抗"COM",你看看"OpenDoc" 阵营的几个成员:IBM、Apple、Borland、No
vell,你会感到这个阵营十分豪华、强大。但结果却差强人意,"OpenDoc"无疾而
终,而"COM"依然生机勃勃。
 
有人说"COM"没落了,那么就太不了解Microsoft了。在与"OpenDoc"的竞争中,
"COM"是个彻底的胜利者,在与"Java"的竞争中,"COM"成功的进化了,在这
个过程中Microsoft体现了强大的吸收能力、以及无法想象的韧劲。.NET只不过是C
OM的"别名"而已。对于一个经验丰富的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令人联想起战国时期
的强秦。
 
战国时期的秦国,采取"远交近攻""抚弱掠强" 等措施傲视六国,今天的Micro
soft也是这样,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技术许可协议,即使Aut
oDesk这样的公司都与Microsoft签署了这个协议,这个协议使得每个集成VBA的产品
的给个用户许可为Microsoft付40$的许可费,如果你了解VSIP(Visual Studio In
tegration Protocol)协议,以及有多少公司签订了VSIP协议,你就真正感觉到Mi
crosoft的可怕;Microsoft Office 97、Visual Studio 6.0的用户界面十分漂亮,
为什么Microsoft自己的开发工具不提供类似的软件组件?你看到众多第三方的Mic
rosoft盟友纷纷推出自己的界面库以模仿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,一个用于开发轻量级Ac
tiveX控件的类库),Microsoft还有一个基于ATL的类库,这个类库用于开发Active
X Designer,ActiveX Designer是绝大多数程序员不了解得一类对象,如果你熟悉
Office开发,你知道Office VBA 中有一类对象,即Form2,此外VB6.0 中的报表设
计器(以及著名的Active Reporter),都属于此类对象,用这个类库,你可以为V
B6.0以及集成VBA的系统提供定制化的可视化设计机制等等,如今ActiveX Designe
r已经演化为集成于Visual Studio .NET中的设计器。(未完)
 
三、向Microsoft学习
 
无论从什么角度评价Microsoft,我觉得Microsoft是值得我们学习的,如果说生活
在这个时代有Microsoft存在是一场灾难,你就应该痛恨这个家伙,但你首先要向这
个家伙学习!我无意为Microsoft歌功颂德,我只是想说出十几年我对Microsoft技
术的感受。
 
Microsoft在研究式的开发中受益极大,如果你有兴趣,你可以访问http://resear
ch.microsoft.com/,虽然部分中国公司也有研究院,但与Microsoft相比,真有"
米粒之珠,也放光华?"的感觉。2003年,我在北京的一个地方现场体验了Micros
oft亚洲研究院的招聘会,我看到中国的精英们进入Microsoft的渴望,事实上,在
中国大陆,Microsoft亚洲研究院的人力资源已经延伸到各著名高校的相关专业的核
心层,我感到,Microsoft几乎不需要"求贤",因为,只要Microsoft需要,精英
们会"蜂拥而至",每个人都有"可以理解"的理由而向往那个地方,如果为搞数
学研究蜂拥到加州大学,我觉得可以理解,因为那里有数学土壤,出了成果国人也
会感到自豪,因为"科学无国界"。技术是否有国界?不知道是否有定论?!想想
DVD等技术专利给国内业界带来的灾难,不知道应不应该痛定思痛,在Microsoft校
园招聘现场的气氛中,我似乎明白了为什么国人"原创技术"少得可怜。我读过几
本Microsoft亚洲研究院的高手写的书,明显可以看出,Bill gate 是他们的精神领
袖以及他们对Microsoft的虔诚,国内的研究机构应当研究一下Microsoft的用人之
道,Microsoft好像是三国里的人物,不知是刘备还是曹操,或者二者的混合物。我
经常路过西格玛大厦,第一次西格玛大厦进入真有"朝圣"的感觉,也与Microsof
t中国的几个层次的人打过交道,各中滋味实在一言难尽。
 
在Office大战中,国产软件的确在一些方面与Microsoft进行较量,其实给人的感觉
很勉强,界面上的似是而非,或用户习惯方面的接近并不能解决根本的问题,一个
好的软件开发人员必须是一个软件使用的高手,很难想象一个软件操作水平很拙劣
的开发人员能开发出高水平的软件,我最早使用的软件之一就是 Microsoft Word,
当时的版本是2.0,大概是1992年的事情,给我留下深刻印象的是集成于Word中的W
ord Basic,后来,我接触到Excel 3.0,不出所料,Excel中集成的是Excel Basic
,后来使用的Access中自然内置Access Basic 1.0,在这些软件集成捆绑成Office
之前,我就感觉这些产品的构思十分了不起,很具有Microsoft的风格,因为你知道
,即使是一个DOS, Microsoft都要提供一个内置的QBasic或GW Basic。虽然关于M
icrosoft的产品评论很多,作为一个技术人员,我认为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 Basi
c .NET)。
 
与许多公司不同的是,在技术体系上,Microsoft几乎所有的产品是息息相关的,W
indows、Office、Visual Studio .NET虽然各不相同,但公共的核心即将形成,我
们已经看到,核心组件方面,Office与Visual Studio .NET日渐趋于一致,例如Mi
crosoft正在将Office 2003的核心组件VBA 6.X逐步用新的Visual Studio Tools f
or Office替代,而我们依然在一些似是而非的现象上与Microsoft的产品比较差距
,国家采购或政府采购支持的公司,不去钻研核心技术,只是急功近利的采用短期
行为急于与Microsoft相争,不知是否有 夫 撼树的感?,个人的?验是,先学习M
icrosoft,踏踏实实的学,了解 Microsoft,深入的了解,然后再喊口号。(未完

 
四、为什么用MFC?
 
经过若干年的竞争,Borland 的OWL几乎消失了,这个OWL是个非常漂亮的C++类库,
在Borland C++ 3.1风光无限的年代,OWL真正的做到了独领风骚。然而,Borland
C++ 4.0错过了进入32位程序的最佳时机,BC 4.0推出后不久,迎来了Win95,Borl
and仓促上阵,以一个小的"Pack"使得BC4可以编译基于Win4的程序,当时的Visu
al 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虽然形式上引入了D
elphi的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++中的位置依然如故。M
FC的未来,应该不必担心,只要你深入考察.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就是!而且Vis
ual Studio .NET IDE还支持用ATL与.NET库扩展的Addin,如果你希望用MFC管理AT
L与.NET库,请继续支持我!(待续)
 
五、认识Application对象
 
如果你熟悉Microsoft Office,你应该进一步的剖析这个大型软件,Microsoft Of
fice中几乎每个程序都是可二次开发的,这一点得益于Microsoft Office内置的二
次开发机制,一个是基于COM机制的VBA模型,另一个是基于.NET框架的托管模型:
Visual Studio Tools for Office。作为一名程序员,你应当在技术角度解析Offi
ce的技术结构。Microsoft的大多数软件的对象结构可以通过Visual Studio提供的
工具OLE/COM Object Viewer考察其类型库得到,通过引用类型库,你甚至可以得到
描述对象信息的C++头文件。这样做真是好处多多。一个典型的Office通常都有一个
Application对象(或其他一个与之相当的对象),这个对象相当于软件枢纽,在
这里,我们不讨论Office,借此话题说说 Application对象。大多数支持扩展(Ad
din、Plugin)的软件都存在类似的构造。通常,一个系统得Application对象或者
是一个COM对象,或者是一个.NET对象,如果你的系统存在这类对象,你的系统就基
本具备支持Addin、Plugin的机制了。一个理想的做法就是在一个 MFC系统中,内置
一个ATL对象或.NET对象,稍后我们给出方案如何做到这一点。设计Application对
象的关键是如何规划这个对象的属性、方法、事件。如果你希望系统具备良好的扩
展性,Application对象是十分关键的,这也是构架艺术的体现。所谓Addin(Plugi
n),是系统运行时根据需要加载的对象库,Addin(Plugin)之所以可以扩展系统,关
键的因素就是系统加载Addin(Plugin)时,将 Application对象传递给Addin(Plugi
n)库,设想一下,如果Application恰到好处的触发了系统事件,而Addin (Plugin
)库如愿的解释了事件,一个Addin(Plugin)库的任务不就OK了吗!因此Applicatio
n对象是系统设计的关键。
 
如果你精通ATL对象,在你的MFC系统中添加一个ATL对象,这个任务可以用VC Wiza
rd完成。你已经接受了一个事实,就是MFC程序中存在一个CXXXApp对象(CWinApp的
派生类),现在你要做的是增加一个对应得ATL 对象。这个对象可以在CXXXApp::I
nitInstance()中创建,如果ATL对象的类是CXXXAppObject,建议你在CXXXApp 对象
对象中增加一个成员变量,例如:CComObject<CXXXAppObject>* m_pAppObj,然后
可以入下初始化m_pAppObj:
 
m_pAppObj = new CComObject<CXXXAppObject>;
 
注意程序结束时在CXXXApp::ExitInstance()中释放m_pAppObj,语句如下:
 
delete m_pAppObj;
 
你可以将系统得关键属性设置成CXXXAppObject的属性,例如系统得标题、是否为多
文档等等。系统希望外部调用的功能可以实现为 CXXXAppObject的方法,这一点取
决于你的需要。系统需要外部扩展的功能,表现为CXXXAppObject的事件,关键是在
恰当的位置触发事件以及提供的事件参数。例如,你可以在CXXXApp::InitInstanc
e()触发应用程序开始的事件OnStartUp,Plugin捕获事件后,可以进行特定的初始
化(身份确认、初始信息查询等等);
 
你可以在CXXXApp::ExitInstance()触发应用程序结束事件,Plugin捕获事件后,处
理用户需要的系统退出工作。所有的设计取决于具体设计。
 
如何加载Plugin,是一个有趣的问题,如果Plugin实现为一个COM范畴(Category)
,可以运用COM技术枚举这个Category;可以将Plugin安装到一个特定目录,也可以
通过注册表。Plugin的实现可以用COM技术、也可以用.NET框架。适当的机会我会提
供例子……
 
FireFox与Microsoft
 
FireFox在一片赞扬、欢呼声中激情登场了,也许人们真的期待已久,平静的水面终
于被扔进一块石头。我是IE的最早期的用户了,1996年首次 Microsoft的TED(技术
教育大会),IE4还没有发布时候,我们有机会目睹了内部版本的IE4(当时内部名
称是:纳什维尔,英文名称忘记了),那真是一次令人激动的预览,当时IE3与Nav
igator 3激战正酣。当你第一次看到想象中的"Active Desktop",如果你没有身
临其境,你不会激动。IE4本质上是一个Shell,其SDK是免费的,Navigator是基于
Mozilla的浏览器,虽然是开源的,由于要照顾更大的共性(与操作系统无关),因
此Mozilla不能充分的利用Windows的优势,Mozilla不能为广大的程序员带来所谓开
发人员的"快感",顶尖程序员可以驾驭Mozilla,以实现技术深度带来的乐趣,最
早的Navigator同时提供17个版本(注意:不是 17种自然语言,而是17种操作系统
),从数学角度分析,Mozilla就像一组公理,你可以以此为基础开发不同操作系统
上的浏览器,Navigator 就是基于Mozilla的一个漂亮的结果,你能欣赏到代码结构
的优美,然而失去的却是功能强大的个性(要知道,Windows用户在数量上远大于其
他操作系统用户的总和)。普通用户不可能读懂Mozilla的代码,即使懂了也不能很
好的运用,这也许是Mozilla(以及大多数开源代码)失败的致命原因之一。IE内核
聪明的抓住了开发者,你想想:对数以万计的中、初级开发者而言,容易驾驭是首
选的选择,也是明智的。我读过Mozilla,但我不会在开发过程中为一个具体的项目
应用它。只要是浏览器,就不可能绝对的安全,无论是Mozilla,还是IE。当我了解
到FireFox是基于Mozilla的一个新的浏览器,我基本上对其失去了信心,我有一个
奇怪的观点:FireFox的推出,最大的受益者绝对是Microsoft,即使Microsoft失去
20%的份额,但是会导致Microsoft强化IE,Microsoft正不知道如何促使IE进化的
时候,FireFox的出现无疑为 Microsoft提供了机会,物种进化的原则就是竞争,F
ireFox就是促进IE进一步强大的催化剂。FireFox的扩展机制的确十分灵活,如果对
手不是Microsoft,就很难掀起波澜,而且当高级的开发者逐渐了解FireFox的时候
,FireFox的漏洞就会渐渐暴露,试想想,如果某种 Linux取代了Windows,那么,
它的漏洞也会与Windows一样多,因为那个时候,会有与研究Windows漏洞一样多的
人去研究对应得 Linux的漏洞!从个人的角度上看,Microsoft也许有点"冤",因
为窥视Microsoft弱点的人实在太多了。从理论上看,计算机安全性是个永远的话题
,就像任何社会都需要警察一样,没有了小偷、贼、犯罪,警察也就消失了,你想
想,文明是什么?野蛮能消失吗?野蛮消失了,文明也就不存在了,高度文明就是
更不存在了。人类克服了癌症,下一个疾病会比癌症更致命,但这并不意味着不必
克服了癌症,进步真是一种挑战……
 
IE的技术构思肯定是个卓越的构思,IE可扩展的机制,会给Windows开发者带来许许
多多的益处。我正在计划一片文章,介绍如何将你的对象模型与MSHTML库实现对接
,这样,在HTML文件中可以将你的指令系统与HTML对象模型融合在一起。
 
话说"Hook"
 
在CSDN上时常看到关于"hook",的问题,令我想起另一个话题,那就是游戏"外
挂"。Hook提供一种改变一个Windows窗口消息处理的一种手段,通常的开发根本用
不到,因此,谈不上"常用",早期的Windows,由于不能很好的支持远东(当然包
含汉字)地区的文字,因此出现了许多外挂的软件补充Windows的不足,中文之星是
一个典型的、令国人自豪的软件,监控软件也许要运用hook技术,此外,很难想象
什么软件会用到hook。有人问我,能不能改变一个进程的数据处理行为,我曾经告
诉他:能,也不能!感觉告诉我,hook绝大多数场合下是一种"不礼貌"的行为。
曾有一段时间,我的服务器,经常有人悄悄地近来,给我增加许多超级用户,肆意
修改我的管理权限,我找到托管商,解决了这个问题,那时,我也买了几本服务器
监听、安全方面的书,看了几天,我就放弃了,为什么?担心学坏(正、邪仅在一
念之差),其实,每个服务器都很脆弱,对有经验的系统程序员而言,安全性与道
德准则是联系在一起的,软件技术上走邪路很容易,有时我会想,如果我去设计病
毒或者当黑客,会怎样?基础数学出身的我,数论、组合学、密码理论统统不是问
题,Windows虚拟驱动程序开发,也不是问题!为什么那么多的人关心hook?国人的
正道软件寥寥无几,可破解术却出神入化,可惜,可惜!hook是一种底层的编成机
制,能理解好hook的人,完全具备掌握一流技术的底蕴,真希望回头……
 
一时心血来潮,就发了这个帖子,很难说是有心,还是无意。几天前我在新浪网上
看应氏杯围棋决赛,我觉得该赢了吧,作为一个围棋迷,我们等了十几年,等到了
属于国人的应氏杯。记得7、8年前在还在大学工作的时候,有一次,一位同事兴致
冲冲的走道我面前对我说:"嗨,昨天马XX赢了李昌镐!",当时我在系办公室正
在看报纸,那位仁兄见我头都没抬,非常不满的抢下报纸,对我吼道:"喂!马XX
赢了李昌镐!!你听到没有!!!",我对他说:"你大惊小怪个啥?!马 XX输了
李昌镐多少盘,你知道吗?",马XX几乎一直在输给李昌镐,人们已经不奇怪了,
偶尔赢一次,国人就把他捧得北都找不到了,李昌镐弱冠17的时候就傲视这个世界
了,可至今面孔不变,几天前的农心杯,中日联军5个人,被他打个落花流水,李昌
镐是公认的世界第一,以至于有的高手知道下一个对手如果是他,就会去订回程机
票。这次应氏杯,国人竟然感谢崔哲瀚,何也?因为这个弱冠19的小子,挡住了他
的大哥李昌镐才使得应氏杯有了悬念。当国人媒体在说韩国仅李昌镐一人厉害的时
候,不知道是出何居心还是自欺欺人,李昌镐年方30,不知道要力压中、日多少年
!面对这个名字,真有点麻木了,这个太极虎!软件界又来了我们一向不齿的印度
虎,2001年我们的软件出口额仅是印度的四十分之一,我们震惊了,怎么可能呢?
这个四十分之一水分很大,很可能更可怜!当时我在大连参加一个关于"大连软件
出口国内第一"的官方会议,那位大人在会上说:"据说,我们大连软件出口国内
排名第一,市有关领导希望今天的会议给出这个第一的数字依据,希望你们把数据
报上来,去年的数据也可申报,注意,我们要的只是数据,你们仔细体会,我们根
据数据,有奖励,机会难得呀!"……。某一天,几个朋友在我家看央视的对话节
目,对话一方为国内的软件大鳄们(用友、阿尔派等公司的老总们),另一方为印
度软件的一个代表团。当问及中、印软件差距的时候,我们的刘老总(代表阿尔派
)不以为然的说,据他的看法,我们已经快赶上(印度)了,……,言下之意颇有
印度的水平不过如此的感觉,印度方的话我至今记忆犹新:"是否赶上,国际市场
说的算!在中国看来,印度程序员的个性不足,技术也不怎么样,其实是个错觉,
印度软件首先注重个性,许多重要的美国商品化软件都是在印度本土开发的……"
,我们的舆论总是将印度程序员的水平描述的平庸至极,可是差距日渐拉开,……
,围棋、足球(不好意思谈,谈不出口!)、软件,我们被近邻严酷的封锁了,乐
坏了记者们、给媒体带来了生机……
 
日本江户时代的围棋,如果一个人要想世袭一个称号(例如:本因坊),他必须战
胜所有的师兄弟,然后,住进师父家的内室,你知道以后的事情吗?以后,这个棋
手,就得为师父一家做饭、带孩子、搞卫生……,其余的门人则一心一意的下棋,
这样的人、方式,造就了一代一代的本因坊,他们的棋谱大多数都流芳至今,这就
是早期日本围棋的悟道模式。软件总共有多少语句?我最早接触的计算机软件教材
是一本英文版的(影印的D版),不同于我们,那本书的作者构造了"X-语言",他
们不讲什么C、Pascal、Basic,一旦缺了什么机制,就给"X-语言"添加些成分。
什么C、Pascal、Basic,你感觉差不多,但现在却分出了等级!我们驾驭语言的能
力弱得很,可是我们在语言的细微之处却很讲究,不知道对不对,许多程序员也许
是出于虚荣而用C++,事实上,地球人到知道,做数据库,Delphi、VB远比C++胜任
,铺天盖地的C++的书,写的东西几乎雷同,因为,有用的或者作者不写、或者作者
不懂。有时我在想,如果国内没有内需,会怎样?也许软件内需的存在,造就了中
国软件的特色,我认为国内业界并没有充分利用中国软件内需的存在,也许中国软
件内需的存在是软件落后的硬伤。
 
我记得一部电影《神辫》,那个英雄的大辫子被洋人炸掉了,最终他成了神枪手,
战胜洋人用大刀、秘籍是不行的,用洋的东西战胜洋的技术才是正道。我觉得,一
个好的程序员必须了解软件的历史,学习历史,你知道你为什么弱,别人是如何强
大的。我们正在另一个战场上抗美(可笑的是我们却要赶超印度!),无论 Micro
soft、Borland如何争斗,无论他们谁统治谁,他们不影响美国的强大,朋友们,学
习Microsoft,开发出让国人感到牛的软件!
 
这个帖子出乎本人的意料,愿意与大家共勉,希望这个帖子常在,与大家敞开心扉
的交流!
 
-- 
 
 
   算法是core、算法是key、算法是soul 
 
 

--
我想像不出他们手中摆弄那些冰冷的机械时的寂寞与孤独,想像不出他们经历失败时是否也有过放弃与逃避?但无论如何,他们成功了,就像很多成功者一样他们付出了心血和汗水,最终收获的是掌声与鲜花。
※ 来源:.两全其美 BBS http://lqqm.net [FROM: 202.120.40.65]
 
 

跟贴 所有跟贴全部展开 编号 状态 作者 日期 标题       星级
393  babyfrog Mar 14 ○ 十年MFC经历认识的Microsoft技术(24.2千字) 2/6人
416 N jinxinbao Mar 17 Re: 十年MFC经历认识的Microsoft技术(9字) 0/0人
419 N lazing Mar 17 Re: 十年MFC经历认识的Microsoft技术(34字) 0/0人
424 N lhf Mar 17 Re: 十年MFC经历认识的Microsoft技术(12字) 0/0人
425 N awaya Mar 17 Re: 十年MFC经历认识的Microsoft技术(345字) 1/1人
427 N javaer Mar 17 Re: 十年MFC经历认识的Microsoft技术(3字) 0/0人
432 N 浮云 Mar 17 Re: 十年MFC经历认识的Microsoft技术(2字) 0/0人
433 N anysys Mar 18 Re: 十年MFC经历认识的Microsoft技术(14字) 0/0人
434 N babyfrog Mar 18 Re: 十年MFC经历认识的Microsoft技术(113字) 1/1人
435 N 花无缺 Mar 18 Re: 十年MFC经历认识的Microsoft技术(213字) 1/1人
 
本版其他主题
作者 日期 标题
jwancm Mar 14 ○ 我新装的C怎么只看得到每一行的上半边啊? 
xang Mar 15 ○ 请教,怎样用c语言实现LIN-bus的主机驱动 
zjhxd Mar 15 ○ 重金求遗传算法高手帮忙编译个程序 
westbulls Mar 15 ○ 请教高手 
 
[返回上一页][本讨论区]
--------------------------------------------------------------------------------
 

没有评论:

google站内搜索

Google