微软软件开发技术二十年回顾

今年11月,微软新一代的操作系统vista即将正式发布,它将会极大地改变原有的windows编程机制。近20年来,随着技术和应用的变化、发展,微软的开发技术也历经变迁。随着微软下一代开发平台vista即将发布,微软会把开发者引向何方?


  自windows 1.0问世到今年11月份,微软windows操作系统已经走过了它辉煌的二十一年。沧海桑田一瞬间,让我们再次追随windows的踪迹,了解微软核心技术发展史,评析她当时所处的位置并展望其今后的发展趋势。

  一、 操作系统篇

  win16时代(1985~1995)

  1985年11月,微软公司正式发布了第一代窗口式多任务系统──windows 1.0,代表了ms-dos时代将逐渐终结,windows王朝正式拉开了序幕。该操作系统的推出标志着pc机开始进入了图形用户界面(gui)时代。 1987年12月9日,windows 2.0发布,但这个版本依然没有获得用户的广泛认同。

  1990年5月22日,微软推出windows 3.0,由于在界面/人性化/内存管理多方面的巨大改进,终于获得用户的认同。1992年4月,windows 3.1发布,在最初发布的两个月内,销售量就超过了一百万份;至此,微软公司的资本积累/研究开发进入良性循环。随后,首次发布了windows 3.2中文版本。不论是图形操作系统的稳定性还是友好性,windows 3.x都有了巨大的改进。windows 3.x在界面人性化和内存管理上有了较大的改进:具备了模拟32位操作系统的功能,图片显示效果大有长进,对当时最先进的386处理器有良好的支持。另 外,这个系统提供的对虚拟设备驱动(vxd)的支持,极大改善了系统的可扩展性。

  1992年10月,windows for workgroups 3.1发布,标识微软公司吹响了进军企业服务器市场的号角。1993年,windows nt 3.1发布,它是第一款真正面向服务器市场的产品。值得注意的是,在这个版本中,微软把主要的api改为32位的版本。

  win32时代(1995~2005)

  1995年8月24日,微软推出具有里程碑意义的windows 95。这是微软开发的第一个独立的32位操作系统,并实现真正意义上的图形用户界面。从此,个人电脑进入了普及化阶段。

  另外,windows 95是单用户多任务操作系统,它能够在同一个时间片中处理多个任务,充分利用了cpu的资源空间,并提高了应用程序的响应能力。同时,windows 95还集成了网络功能和即插即用功能。

  1996年8月,windows nt 4.0发布,增加了许多了管理方面的特性,稳定性进一步提高。同年11月,针对各种嵌入式系统和产品设计的windows ce 1.0发布。这标识着微软的战线从桌面系统杀到了服务器市场,又转攻到嵌入式行业;至此,微软帝国的雏形已基本形成。1997年11月,windows ce 2.0发布。

  1998年6月25日,windows 98发布;与internet的紧密集成是windows 98最重要的特性。1999年6月10日,windows 98 se发布,以内置方式提供了internet explorer 5、windows netmeeting 3、internet connection sharing、对dvd-rom和对usb的支持。

  windows 2000(windows nt 5.0)professional于2000年年初发布,它是第一个基于nt技术的纯32位的windows操作系统,实现了真正意义上的多用户。从此, windows操作系统进入商业用户市场。windows 2000包含新的ntfs文件系统、efs文件加密、增强硬件支持等新特性。

  2001年10月25日,windows家族中极具开创性的版本windows xp面世。windows xp具有全新的图形用户界面,整合了更多更实用的功能:防火墙,即时通讯,媒体播放器,增强的即插即用特性。windows xp具有全面为中国用户开发的中文技术及特性,能够全面满足中国用户在数字时代的需求。

  2003年4月,windows server 2003发布。这个版本对活动目录、组策略操作和管理、磁盘管理等面向服务器的功能作了较大改进,对.net技术的完善支持进一步扩展了服务器的应用范围。

  2004年9月微软发布windows xp sp2。

  windows vista(2006.11~)

  今年11月,微软新一代的操作系统vista即将正式发布,它将会极大地改变原有的windows编程机制。

  vista生成器最终将跟以前的win32 api进行分离,取而代之的是可管理的winfx,而winfx将成为微软继dos、win16、win32之后推出的第四代api。据外刊报道,以前利用win32 api开发的软件,在微软承诺的维护期之后将不能运行。

  win32 api历经windows 95到xp,受到众多应用软件开发商的追捧。过去,无论是最常用的字处理、电子邮件、即时通讯软件,还是专业的杀毒、erp软件等,大都利用微软提供的 api进行开发。微软提供了近7.8万个windows api以及大量的辅助开发工具,这种友好的服务极大地鼓励了无数程序员在微软平台上创造各种应用软件。但另一方面,微软又通过api“控制”了软件的开 发,帮助自己成就了霸主地位。如今,在win32 api逐渐淡出人们的视野后,新一代的api还能如微软设想的那样延续win32时代的辉煌吗?

  微软已经看到了这些威胁。所以,vista的发行中配带了全新的winfx。同时,微软 的winfx已经把繁杂的win32 api减少到8千个左右,在.net框架下采用可管理代码编程模式,进一步减轻程序员的负担。另外,winfx还加入全新的图形用户界面子系统 avalon、文件子系统winfs和网络服务通讯子系统indigo,使得开发环境更加友好。时势所趋,正如win32取代dos和win16一样, win32 api也终将被winfx所替代,而成为新操作系统中的“遗留物”。

  据估计,在一段时间内,程序员还可以继续使用win32 api开发应用程序,但利用winfx开发的程序并不向下兼容,只能在vista平台上运行。另一方面,vista操作系统带来的变化和winfx开发者 框架迟早将会刺激开发者转向.net框架。因此,作为windows开发人员,应当尽早掌握.net框架可管理编码的技能以便应对在2008年全面使用 winfx时可能出现的种种问题。

 二、 api篇

 

  随着windows操作系统开始占据主导地位,开发windows平台下的应用程序成为 人们的需要。当然,这也为传统的dos程序员提供了一种新的编程方法—一种不受设备限制并由事件驱动的编程方法。另一方面,windows gui的开发迫使传统的dos程序员的编程方法发生了变化。当时,大多数dos软件以过程方式编写,即一个函数调用另一个函数,主程序始终处于控制之下, 而事件驱动的编程模式使得程序放弃它们的全部控制权,等待外部事件发生并对外部事件作出响应,以便将它们的函数全部提供给最终用户。结果是,今天的 win32(当然包括早期的win16)gui程序的结构仍然与1987年时的结构相同。图1展示了windows gui应用程序的基本结构。

1.windows gui应用程序的基本结构。     

  其中,每一个程序都包含一个进入点、主窗口创建、一个消息循环和主窗口撤消。此外,都有一个函数与主窗口过程相关联,称为窗口过程,它包含用于处理系统事件和应用事件(如键盘输入、鼠标移动和点击、定时器报警、菜单选择和按钮点击)的代码。

  在windows程序设计初期,windows程序员所能使用的编程工具唯有api(应 用程序编程接口)函数,这些函数是windows提供给应用程序与操作系统的接口,它们犹如“积木块”一样,可以搭建出各种界面丰富功能灵活的应用程序。 所以,可以认为api函数是构筑整个windows框架的基石,在它的下面是windows的操作系统核心,而它的上面则是各种功能的windows应用 程序。当时,因为缺乏良好的windows编程平台,程序员想编写具有windows风格的软件,必须借助api,api也因此而被赋予至高无上的地位。 相应地,程序员还必须熟记一大堆常用的api函数,而且还得对windows操作系统有深入的了解。

  随着软件技术的不断发展,在windows平台上很快出现了很多优秀的可视化编程环境 (诸如vb、vc ++、delphi等),程序员可以采用“即见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序。但实际上,要真正开发出更灵活、更实用、 更具效率的应用程序,必然要涉及到直接的api函数调用;对于比较复杂和特殊的功能来说,使用类库和控件往往难以实现,这时就需要采用api函数来实现。

  【提示】关于钩子技术

  windows操作系统是建立在事件驱动机制之上的,系统各部分之间的沟通也都是通过消 息的相互传递而实现的。但在通常情况下,应用程序只能处理来自进程内部的消息或是从其他进程发过来的消息,如果需要对在进程外传递的消息进行拦截处理就必 须采取一种被称为hook(钩子)的技术。钩子是windows操作系统中非常重要的一种系统接口,用它可以轻松截获并处理在其他应用程序之间传递的消 息,并由此可以完成一些普通应用程序难以实现的特殊功能。钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入到系统。值得注意的是,钩子技 术成为许多种windows软件的核心技术,例如屏幕抓词、垃圾邮件过滤、软件界面高级定制等。

 三、 mfc篇

  windows api是面向过程的接口,因此对于当时的编程技术来说,它是完美无缺的。但是,随着人们逐渐使用c++进行windows程序的开发,迫切需要建立与 windows api的面向对象包装的接口。1992年,微软将windows api开发成为它的应用程序框架(afx),后来该产品又演变成为目前的微软基础类库(mfc)产品。下图2展示了mfc的顶级类层次结构。

  

  图2.mfc的类层次结构。

  mfc为使用c++开发windows gui应用程序提供了一个十分全面的基础框架,它对以前的api进行了面向对象的科学包装,大大简化和加快了程序的开发。

  win95推出后出现在visual c++ 4中的新版本的mfc 4.0使这个框架达到辉煌时期,在4.2版本时达到鼎盛。

  mfc框架中引入了一种适应当时开发需求的典型的文档-视图机制,从而大大简化了程序开 发。当然,要掌握这些框架结构绝非一日之功,其中还涉及到部分com及大量的宏技术。也正由于这些方面,导致了业界对mfc的褒贬不一。但正如其它微软技 术一样,这只能进一步促进微软继续改进这种技术。几十年的技术积累已经奠定了mfc的生存基础,即使windows的vista发布,mfc也不可能退出 windows的舞台。事实上,vista之后的visual studio.net仍将mfc作为一个重要的组成部分,在今年的visual studio.net 2005中,mfc在c++中的位置依然如故。mfc的未来,应该不必担心,只要你深入考察.net类库,你会发现,mfc的许多思想机制正悄然进入. net。

  新版的visual c++.net中mfc已经支持.net开发了,而且mfc与atl的协作更趋于和谐。如今你可以在visual c++.net中综合应用mfc、atl与.net库三者来开发应用程序,从而进一步增强c++开发的威力。

  【补注】atl框架与wtl框架

  atl即“activex模板库”。它不能单独工作,是设计与visual c++ v4.2,v5.0,v6.0一起工作的。

  mfc和atl都可以用来开发activex控件。事实上,两者都支持各种开发向导和强 有力的帮助类和模板,从而使控件的开发尽量简单。而且,这两种框架各有千秋。简言之,如果你相当熟悉mfc的各种机制而且是在创建庞大而成熟的图形应用程 序本地控件或服务器控件,那么使用mfc书写控件时会有很大的优越性。

  然而,用mfc建立的控件在执行时要求相应的mfc dll支持,相应地导致体积庞大。如果在控件的规模成问题时,则可以考虑 使用另一种方法-atl活动模板库。

  在建立轻量级控件(几乎或根本没有用户界面要求的com或dcom服务器)时,atl方 法是mfc方法的替代方法。atl在建立com组件时使用了模板机制,这个框架对许多标准的com接口提供了大量的模板。事实上,atl根本不需要任何类 型的运行时刻服务—由于以c++模板为基础,所以atl对于外部库根本没有链接依赖性。因此,基于atl的组件要比等价的基于mfc的控件占用的资源少。

  wtl框架,作为atl的扩展,也是由atl小组开发的,包含在微软于2000年1月发 布的开发平台sdk包中,虽然微软没有正式支持。wtl通过提供一个用于编写win32应用程序和控件的轻量级的框架、一些特殊的视图、gdi对象和实用 的类来扩展atl窗口类。wtl的目标是成为最好和最简单的实现基于win32和atl的应用程序、服务器和控件的方法。

 四、 com、ole、activex及com+篇

  微软的许多技术,如ole、activex、以及directx等都是基于com技术而建立起来的。微软本身也大量地使用com组件来定制他们的应用程序及操作系统。那么,什么是com呢?


  所谓com即“组件对象模型”,是一种说明如何建立可动态互变组件的规范,此规范提供了 为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的 开发语言是否一致以及是否运行于同一台计算机。开发com的目的是为了使应用程序更易于定制、更为灵活。

  其实,com不是以一个单独的开发过程的一部分出现的。相反,它最初是以对象及嵌入系统 的形式产生于windows 3.0。我们知道,ole 1允许一个应用程序(如word或excel)可以不必打开第二个应用程序就能显示其它应用程序的数据。但ole 1还存在两个局限:

  ·首先是嵌入的数据不能被应用程序所编辑;

  ·其次,没有标准化的系统用于存放嵌入的信息。

  于是,出现了ole 2,ole 2是与windows 3.1一起推出的,它是第一个真正的com技术,而ole 1还不具备com的各项特性—它使用的是另一种技术体系。ole 2中产生了一种新的唯一的数据格式,称为复合文件。这种文件中能够包括所有ole支持的应用程序的相关信息,并在任一工作的应用程序中支持编辑、更新、打 印等功能。

  但ole 2仍然存在一些局限性,最为明显的是任何时候要对一个嵌入的数据进行编辑都得重新打开一个窗口。对这一点的改进,生成了ole的一个新版本,称为ole自 动化。该技术除了允许在调用数据的应用程序内部进行编辑(称为内部编辑),还在ole 2的基础上加入了其它两项与com技术相关的改进;一是提供了非c++开发程序(如vb程序)接入com功能的能力;二是支持存在于复合文件以外的基于 com技术的部件的创建。windows 3.11全面支持自动化技术。

  虽然,这最后一次的技术改进给com带来了最持久的冲击,但是com的ole实现并仍然 没有实现bill gate先生的部件化软件的梦想。随之而来的另一技术革新却通过从未想过的机制—vbx控件使之变成了现实。vbx是visual baisc开发环境的一些内带工具,最早由c++开发,后来却都是用vb自己开发的。vbx是一类dll应用程序,具有特殊的支持以便可以在vb系统中使 用。在一年左右的时间内,vbx控件的市场迅速发展成为一个几百万美元的产业,并带动了vb产品的销售。vbx具有两项以前的自动化服务器所不具备的重要 性质:用户接口和它与客户(容器)的通信能力。

  vbx的这种出乎意料的成功让微软决定让com工作组在自动化基础上增加等效于vbx的 性能。这一开发过程的结果就是ocx控件(是一种特殊的自动化dll服务器),它采用com技术支持vbx控件的所有功能,而且它从此升级为32位的控 件。可惜,在ocx尚未来得及普及以前,因特网和java的出现使它们被重新改造成了activex控件。

  当时,没有谁会预料到java和internet会在www领域以氢弹的威力在计算机领 域爆炸。微软长期以来一直认为他们在pc机软件领域的垄断是无可挑战的,但是java和网页浏览器伴随着internet,以一种全新的方式进入到个人微 机的软件领域,且该领域由sun和netscape控制而不是微软。作为迎击,com变成了activex,复合文件变成了activex文件,ocx控 件变成了activex控件等等。基于com的activex组件均根据internet的特点增加相应的新特征,如保密安全性能、代码短、数据支持异步 下载。同时,activex组件还具有如下特点:

  ·activex在自动化服务器上增加了用户接口;

  ·通用属性和属性页机制使activex控件的行为标准化;

  ·连接点机制支持从activex控件向容器发送事件;

  ·activex的持续性解决了越时的状态存储问题。

  总之,ole1、ole2、ole自动化、vbx控件、ocx控件、activex以及com+都是com概念在windows操作系统的各种实现方式。如今,com已成为微软产品系列的核心组成技术:

  ·internet explorer 4网络浏览器支持所有的activex控件,实际上它正是采用了一个activex组件用于它的显示接口;

  ·windows 98这种新版的windows操作系统将ie与操作系统捆绑在一起,它基于com技术并支持活动桌面,使桌面部件具有网络应用的功能;

  ·internet信息服务器(iis)是微软加入网络服务器大战的重量级武器,iis包括很多的功能强大的基于com技术的系列内容,如active server page,isapi扩展和isapi过滤器;

  ·微软事务服务器(mts)是一种面向数据库的系统,mts采用com技术以支持多种数据库系统和售货机的混合事务处理,并仿造非数据库的执行方式,将事务的处理变成单步的行为,其结果可以为“成功”、“失败”和“返回”而不会因为处理失败而丢失数据;

  ·ole db推回到com的ole 2技术上,它采用与odbc数据库相同的技术,支持非数据库应用程序与面向数据库的技术(如mts)共同工作。

  从另一方面看,最初,windows是利用dll在二进制级实现代码共享的。这也是 windows程序运行的关键——重用kernel32.dll,user32.dll等。但dll是针对c接口而写的,它们只能被c或理解c调用规范的 语言使用。由编程语言来负责实现共享代码,而不是由dll本身。这样的话,dll的使用受到限制。尽管在后来,mfc又引入了另外一种mfc扩展dll二 进制共享机制,但它的使用仍受限制——只能在mfc程序中使用。

  com通过定义二进制标准解决了这些问题,即com明确指出二进制模块(dll和 exe)必须被编译成与指定的结构匹配。这个标准也确切地规定了在内存中如何组织com对象。com定义的二进制标准还必须独立于任何编程语言(如c++ 中的命名修饰)。事实上,com正是充分利用了win32 dll的灵活性才得以真正在windows平台上实现的。com的发布形式是:以win32动态链接库(dll)或者可执行文件(exe)的形式发布的可 执行代码组成。

  注意,com本身也要实现一个称为com库的api,由该库提供诸如客户对组件的查询,以及组件的注册/反注册等一系列服务。一般来说,com库由操作系统加以实现,程序员不必关心其实现细节。

  【注】directx技术

  要在windows平台上进行游戏开发必须了解两个重量级游戏api:directx和 opengl。其中,directx是微软开发的专门用于优化游戏制作的api。directx由很多组件组成:directdraw、 directsound、directmusic、directplay、direct3d、directinput、directsetup。它是允许 你直接控制计算机硬件设备的软件,它比windows gdi要快好几倍,可用于不同的语言和多种平台,支持从绘制象素到高级3d图像,从播放简单声音到数字音乐,从键盘控制到反震手柄……几乎为你的游戏开发 提供了所需的一切。注意,directx的基础正是com技术。

  什么是com+?

  必须明确,com+并不是com的简单升级,但它的底层结构仍以com为基础,com+ 综合了com、dcom和mts这些技术要素,把com组件软件提升到应用层而不再是底层的软件结构,它通过操作系统的各种支持,使组件对象模型建立在应 用层上,把所有组件的底层细节留给操作系统;因此,com+与操作系统的结合更加紧密。下图3展示了com+与mts、com/dcom的关系。

  

  图3.com+与mts、com/dcom的关系

  另一方面,com+不再局限于com的组件技术,它更加注重于分布式网络应用的设计和实 现。com+继承了com几乎全部的优势,同时又避免了com实现中的一些不足,把com、dcom和mts的编程模型有机地结合起来,继承了它们的绝大 多数特性,在原有的特性上增加了新的功能:

  ·真正的异步通讯。

  ·事件服务。

  ·可伸缩性。

  ·可管理和可配置性。

  ·易于开发。

  com+标志着微软的组件技术达到了一个新的高度,它不再局限于一台机器上的桌面系统, 而是把目标指向了更为广阔的企业内部网,甚至国际互连网。com+与多层结构模型(windows dna结构,详见下一节)以及windows操作系统为企业应用或web应用提供了一套完整的解决方案。

  【问题】.net时代,com是否会消失?

  不会。其实,.net只不过是com的别名而已。对于一个经验丰富的c++程序员而 言,.net就是com的进化,而微软内部.net可以说是“com 3.0”。其实,clr就是一个不折不扣的com对象。但是,请注意,.net使用一种不同的方法来编写组件,这样.net组件与原先的com组件存在明 显的不同。.net组件不需要使用注册表和类型库,因为所有关于组件的信息都以元数据的形式包含在程序集(assembly)中。但是,借助于一个称为 com interop的工具,com对象和.net对象可以很好地协作:通过提供软件包类,.net对象可以访问com对象;通过提供所有的注册表项和com对 象构建机制,com对象可以访问.net对象。

 


更多的请看:http://www./windows/2003/index.html五、 windows dna篇

  微软的windows分布式因特网应用体系(简称windows dna)是微软创建新一代高适应性商业解决方案的框架,它使公司能够充分地挖掘数字神经系统的优点。windows dna是在.net平台出现之前在微软平台上进行技术开发的大环境,要利用微软的组件技术ole、com、dcom、mts、com+进行开发,就不能不 了解这个windows环境下的软件体系结构。windows dna是第一个将互联网、客户/服务器和用于计算的pc模型结合并集成在一起的为新一代分布式计算方案而设计的应用软件体系结构。下图4展示了微软创建的 windows dna的系统架构。由图中可见,windows dna使用了一系列的服务来完成它的架构。使用windows dna模型,用户可建造一个能在任何网络上实现的、可伸缩的多层应用软件。

  

  图4.windows dna服务架构。

  因为windows dna应用软件深深地利用了集成的windows平台服务,因此,公司可以把精力集中于实现业务方案,而并不是成为一个系统集成商。

  作为总结,以下简要列出微软在开发windows dna结构时的指导原则:

  ·无须折衷的网络计算

  ·交互操作能力

  ·真正的集成

  ·更低的花费

  ·快速跟近市场

  因为windows dna是基于com和开放的internet标准的,所以发展商可以使用任何语言或工具来生成可兼容的应用程序。com提供了一个现代的、独立于语言的对 象模型,它为应用程序提供了与结构的所有层进行交互操作的标准方式。通过com,发展商通过可插入的软件单元能够扩展应用程序的任何部分,这些软件单元可 由c++,visual basic,java或者其它语言写成。总之,windows dna实际上是微软的.net框架出现以前基于组件的分布式应用程序战略框架结构。

 六、 .net框架篇

  .net是微软自从发布windows 3.0以来最为激动人心的新技术,是微软战略上为下一个十年对服务器和桌面软件工程的第一步,是微软的一场世纪大豪赌。对于.net,微软的定义是,“用于构架、配置、运行网络服务及其他应用程序的开发环境。


该平台包括三个主要部分:公共语言运行时、框架类和asp.net。”

  .net框架是微软公司继windows dna以来的新的开发平台。基于这个新的框架,以前在dna中暴露出来的缺陷有望得到解决。另一方面,.net并没有完全抛弃windows dna,实际上它是windows dna的继续和发展。如今的.net不仅有一套明确的技术规范,还提供了一系列的支持产品,例如编译器、类库甚至最终的用户程序。如 windows.net是操作系统平台、.net框架是运行环境、.net企业服务器为产品服务器、visual studio.net为编程平台。

  .net框架是以一种类似于java系统的虚拟机方式运行和管理的编程平台,通过公共语言运行时刻为基础,支持多种语言(c#、vb.net、c++、python 等)的开发。下图5展示了.net的整体框架结构。

  

  图5..net体系结构。

  下面的图6则从另一个角度展示了公共语言运行库和类库与应用程序之间以及与整个系统之间的关系。注意,该插图还展示了托管代码如何在更大的结构内运行。

  

  图6..net公共语言运行库与类库、应用程序及整个系统之间关系示意图。

  .net框架具有两个主要组件:公共语言运行库和.net框架类库。公共语言运行库是. net框架的基础。您可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可 提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称 为非托管代码。.net框架的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的 命令行或图形用户界面(gui)应用程序,也包括基于asp.net所提供的最新的应用程序(如web窗体和xml web服务)。

  .net框架可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.net框架不但提供若干个运行库宿主,而且还支持第三方运行库宿主的开发。

  【注】.net框架简史

  .net框架1.0(完整版本号1.0.3705),系最初的.net构架,发行于2002年。它也是第一个微软visual studio.net的发行版的一部分(visual studio.net 2002)。

  .net框架1.1(完整版本号1.1.4322),这是首个主要的.net框架升级版 本,发行于2003年,它也是第二个微软visual studio.net版本的一部分(visual studio.net 2003)。它也是首个windows server 2003内置的.net框架版本。这个框架新增功能有:

  ·内建了对移动asp.net控件的支持,现在已经集成到框架的内部。

  ·安全方面的变更—使得windows窗体代码以可靠的行为执行,从而可以在互联网环境内安全运行,并且加入了asp.net应用程序的代码安全访问功能。

  ·内建了对odbc和oracle数据库的支持,现在已经集成到框架的内部。

  ·.net compact框架—这是一个用于智能设备(例如 pocketpc或者smartphone)的.net框架的子集。

  ·对ipv6的支持。

  ·大量的api变更。

  .net框架2.0(完整版本号2.0.50727.42),发行于2005年10月27日。重大改进有:

  ·大量的api变更。

  ·一个新的api让需要管理一个.net运行库实例的非.net的应用程序可以做到这点。这个新的api对.net运行库的各种功能(如多线程、内存分配、代码载入等)均提供了很好的控制。

  .net框架3.0(曾用名winfx),将随windows vista一同发布。这个框架依然使用.net框架2.0版本的clr(公共语言运行时),并加入了适应未来软件发展方向的4个框架:windows描述 基础(wpf)、windows通信基础(wcf)、windows工作流基础(wwf)和windows cardspace(wcs)。

 


更多的请看:http://www./windows/2003/index.html七、 .net框架3.0

  这个最新框架将与即将发行的windows vista绑定发行。这个新式框架的侧重点在于,进一步拓宽.net方案的应用范围。

  .net 3.0与1.x和2.0.net框架存在一些不同之处。前两个框架专注于允许众多不同的语言与同一类库clr进行通讯。clr,从.net 1.0中开始引入并在.net 2.0中得到增强,它基于一个相对简单的概念进行工作:通用语言运行时刻模型能够执行任何运行.net框架的系统中的代码。下图7展示了.net 3.0框架的栈式框架结构。

  

  图7..net 3.0框架结构。

  从总体来看,.net 3.0框架并没有改进现有技术,而是引入了四种适应未来发展的基本新技术:

  ·windows描述基础(wpf)

  ·windows通信基础(wcf)

  ·windows工作流基础(wwf)

  ·windows cardspace(wcs)

  这其中的每一种技术都将成为开发者基于新一代操作系统及.net平台用来实施新方案的基础。

  其中,wpf无可争辩地成为四个新式基础类集中最为重要的。这主要是由于两点:一致性wpf方案;新式的名为xaml的xml标准编程语言。

  首先,wpf为基于asp.net框架进行web开发提供了一种一致的方案来构建编程模型,并且支持使用更为丰富的控件和设计技术来开发windows程序。一个开发出来的单个wpf程序最终能够被发行到桌面,web以及智能设备等多种环境下。

  其次,wpf中创新性引入了一种名为xaml的xml标准编程语言。开发人员利用它能够 控制对象的布局。从表面上看,这种语言似乎与flash极为相似,其实二者之间存在相当的不同。flash是一个成熟的、可控制的、独立于操作系统的封闭 式框架。而相比之下,wpf允许你与操作系统及其它.net框架技术进行集成。总之,二者服务于不同的市场需求但又存在一些“边缘交叉”。

  在这个“网络即是一切”的社会里,windows通信基础(wcf)显得极为重要。这个编程模型把web服务、.net远程技术、分布式事务和消息队列统一到单个面向服务的编程模型中,从而实现真正意义上的分布式计算。

  windows工作流基础(wwf)是一种定义、执行和管理工作流的微软技术。工作流由 一系列的活动组成;开发者能够编写他们自己的域特定的活动,然后把它们应用于工作流中。.net框架3.0/windows工作流基础还提供了一组涉及若 干控制流构建方面的通用目的的活动。值得注意的是,这个框架了还包括了许多visual studio 2005扩展(可视化工作流设计器、支持用户调试工作流的可视化调试器、工作流编译系统)。总之,借助于wwf,新一代应用程序开发过程的流程控制方面将 得到极大的改善。

  最后,windows cardspace(wcs)为程序开发中一直令人头疼的认证问题上提供了一种新的解决方案。不同于以前的方案,现在,微软使用cardspace实现了 一种几乎是全新的安全设计尝试,其基本原理依据“任何用户都能够创建并且共享他的或她的唯一的身份”。

  总之,wcs有望改变你到一个应用程序(基于web、手机或桌面程序)的认证方式,从而极有助于保护用户的私有数据。

  【补注】

  第一,构建.net 3.0解决方案的主要工具仍是visual studio。第二,.net框架并非操作系统本身。因此,net 1.x和2.0和3.0都被设计可以运行于windows xp、windows 2003/r2和windows vista等系统之上。

  八、 总结

  回顾微软windows二十一年核心技术发展史,不由不令人感概万千。微软成就其帝国霸 业的原因多种,但仅从其核心开发技术看来,战略前瞻性是这个软件巨人长盛不衰的最重要原因之一。从无到有,从不完善到完善,无一不显露出这种端倪。如今, 微软帝国传奇依然。在今后这个由众多it巨擘支持下的java时代,在这个linux大旗麾下的开源时代,在这个“无网而不胜”的时代,微软的 window vista及其核心.net框架又会缔造出怎样的奇迹,请试目以待。

 


推荐阅读

协议型网络游戏外挂制作之DLL中改代码

  第一节到第三节我们说了基本工具的准备,第四节使用免升级和免弹出主页来做了一下基本的练习

。第四节中和普通的游戏修改器没有太大的区别,只是一个修改的是数据,一个修改的是代码。这一节

中我们将通过在dll中修改大话的代码来进行外挂的制作。其实在dll中动态修改代码和上一节用的方法

一样,只是要改写的东西更多了而已。  原理和上一节中的函数一样,都是调用writeprocessmemor

y。  这一节的任务是拦截接收到的数据,关于发送的数据可以进行相类似的处理。一般在分析网络

游戏的时候,都是先分析接收到的数据。对于大话的程序,中间如何去分析的过程就不说了,这要看自

己的调适能力了。不过对于9.16之前的大话客户端程序,里面含有大量的调试信息(也可能是脚本信息

),大致分析程序可以发现,程序总是在打印调试信息之后,然后做实际的工作。其中对于"rx_decod

e”这个字段很感兴趣,看看调用的地方:.text:00449d4f154pushoffsetarx_decode;"rx_decode"  

在前方不久的地方就是网络函数recv,因此可以这样来理解,程序接收到数据之后,打印出调试信息,

然后跳转到:

深入浅出Linux设备驱动编程之内核模块

  linux设备驱动属于内核的一部分,linux内核的一个模块可以以两种方式被编译和加载:  (1

)直接编译进linux内核,随同linux启动时加载;  (2)编译成一个可加载和删除的模块,使用in

smod加载(modprobe和insmod命令类似,但依赖于相关的配置文件),rmmod删除。这种方式控制了内

核的大小,而模块一旦被插入内核,它就和内核其他部分一样。  下面我们给出一个内核模块的例子

:#include//所有模块都需要的头文件#include//init&exit相关宏

module_license("gpl");staticint__inithello_init(void){ printk("hellomoduleinit\n"); ret

urn0;}staticvoid__exithello_exit(void){ printk("hellomoduleexit\n");}module_init(hello_i

nit);module_exit(hello_exit);  分析上述程序,发现一个linux内核

用Delphi编写系统进程监控程序

本程序通过调用kernel32.dll中的几个api函数,搜索并列出系统中除本进程外的所有进程的id、对应

的文件说明符、优先级、cpu占有率、线程数、相关进程信息等有关信息,并可中止所选进程。本程序

运行时会在系统托盘区加入图标,不会出现在按ctrl+alt+del出现的任务列表中,也不会在任务栏上显

示任务按钮,在不活动或最小化时会自动隐藏。不会重复运行,若程序已经运行,再想运行时只会激活

已经运行的程序。本程序避免程序反复运行的方法是比较独特的。因为笔者在试用网上介绍一些方法后

,发现程序从最小化状态被激活时,单击窗口最小化按钮时,窗口却不能最小化。于是笔者采用了发送

和处理自定义消息的方法。在程序运行时先枚举系统中已有窗口,若发现程序已经运行,就向该程序窗

口发送自定义消息,然后结束。已经运行的程序接到自定义消息后显示出窗口。//工程文件procviewp

ro.dprprogramprocviewpro;usesforms,windows,messages,mainin'procview.pas'{form1};{$r*.res}

{//这是系统自动的beginapplication.init

JGraph 经典常见问题解答 (FAQ)

  怎样打开/保存基于xml的文件格式?  在新sdk1.4中提供了读、写xml文件的内建支持。jgraph体

系,尤其是图形模式,非常类似于xml结构。因此,任何基于xml的文件能存入图形模式,而无需下载其

它java库。  参考jgraph中的gxlreader和svgwriter的实现gxl2svg示例。gxl导出可通过内置在jgr

aphpad中的数据转换(拖、放/剪贴板)或使用文件>导出>gxl来实现。在jgraphpad中,打开文本编辑器

,选定你想转换到gxl的子图,然后执行文本编辑器中的edit>copy,edit>paste。这将会将gxl插入剪贴

板的文本解释区。    用jgraph怎样生成svg图形?  batik项目(http://xml.apache.org/bati

k/)提供了一个javatm的svg生成器。要查看它的规范,可访问:http://xml.apache.org/batik/svgg

en.html.  基本的想法通过实例化jgraph的paint方法来创建一个特定的graphics2d扩展,即svggra

phics2d。  注意:与jgraph,bati

拖动无标题栏窗体的方法

在任何控件的mousedown事件中加入相似代码,可以实现点任何控件拖动窗体。proceduretvolumeform

.panel1mousedown(sender:tobject;button:tmousebutton;shift:tshiftstate;x,y:integer);consts

c_dragmove:longint=$f012;beginreleasecapture;sendmessage(handle,wm_syscommand,sc_dragmove

,0);end;end.

Samba使用大全-samba服务器(1)

samba协议基础在netbios出现之后,microsoft就使用netbios实现了一个网络文件/打印服务系统,这

个系统基于netbios设定了一套文件共享协议,microsoft称之为smb(servermessageblock)协议。这

个协议被microsoft用于它们lanmanager和windowsnt服务器系统中,实现不同计算机之间共享打印机、

串行口和通讯抽象(如命名管道、邮件插槽等)。随着internet的流行,microsoft希望将这个协议扩

展到internet上去,成为internet上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多

少技术文档的smb协议进行整理,重新命名为cifs(commoninternetfilesystem),并打算将它与netb

ios相脱离,试图使它成为internet上的一个标准协议。因此,为了让windows和unix计算机相集成,最

好的办法即是在unix计算机中安装支持smb/cifs协议的软件,这样windows客户就不需要更改设置,就

能如同使用windowsnt服务器一样,使用unix计算机上的资源了。samba是

简析ADO.Net与ADO在数据内存中的差异

数据的内存中表示形式在ado中,数据的内存中表示形式为记录集。在ado.net中,它为数据集。它们之

间有重要的差异。表的个数记录集看起来像单个表。如果记录集将包含来自多个数据库表的数据,则它

必须使用join查询,将来自各个数据库表的数据组合到单个结果表中。相反,数据集是一个或多个表的

集合。数据集内的表称为数据表;明确地说,它们是datatable对象。如果数据集包含来自多个数据库

表的数据,它通常将包含多个datatable对象。即,每个datatable对象通常对应于单个数据库表或视图

。这样,数据集可以模仿基础数据库的结构。数据集通常还包含关系。数据集内的关系类似于数据库中

的外键关系,即它使多个表中的行彼此关联。例如,如果数据集包含一个有关投资者的表和另一个有关

每个投资者的股票购买情况的表,则数据集可能还包含一个关系来连接投资者表的各个行和购买表的对

应行。由于数据集可以保存多个独立的表并维护有关表之间关系的信息,因此它可以保存比记录集丰富

得多的数据结构,包括自关联的表和具有多对多关系的表。数据导航和游标在ado中,您使用adomoven

ext方法顺序扫描记录集的行。在ado.net中,

北京邮电大学1999年研究生入学考试 数据结构试题

注意事项: 1.答案一律写在答题纸上;2.答案卷应字迹清楚、语义确切;3.算法应说明基本思路,应

对主要数据类型、变量给出说明,所写算法应结构清晰、简明易懂,应加上必要的注释;4.算法可用(

类)pascal语言、c语言等你所熟悉的高级语言编写,但要注明语种。1(10分)选择填空①字符串’a

babaabab’的nextval为a.(0,1,0,1,0,4,1,0,1)b.(0,1,0,1,0,2,1,0,1,)c.

(0,1,0,1,0,0,0,1,1,)d.(0,1,0,1,0,1,0,1,1)②广义表a=(a,b,(c,d),(e,(f

,g))),则下面式子的值为;head(tail(head(tail(tail(a)))))a.(g)b.(d)c.cd.d③输入序列为(

a,b,c,d),不可能得到的输出序列有;a.(a,b,c,d)b.(d,c,b,a)c.(a,c,d,b)

d.(c,a,b,d)④散列函数有一个共同性质,即函数值应按取其值域的每一个值;a.最大概率b.最

小概率c.同等概率d.平均概率⑤直接插入排序在最好情况下的时间复杂度为。a.o(logn)b.o(n)c.o(n*

l

项目计划与质量管理

在可行性分析之后,项目计划与质量管理将贯穿需求分析、系统设计、程序设计、测试、维护等软件工

程环节。项目计划是要提供一份合理的进程表,让所有开发人员任务明确、步调一致,最终共同准时地

完成项目。项目计划是要付诸实施的,不象用嘴巴喊政治口号,可以很夸张。软件的项目计划重在“准

确”而非“快速”。提高质量是软件工程的主要目标。但由于软件开发是一种智力创作活动,很难象传

统工业那样通过执行严格的操作规范来保证软件产品的质量。世上最小心翼翼、最老实巴脚的程序员未

必就能开发出高质量的软件来。程序员必须了解软件质量的方方面面(称为质量因素),如正确性、性

能、易用性、灵活性、可复用性、可理解性等等,才能在进行系统设计、程序设计时将高质量内建其中

。软件的高质量并不是“管理”出来的,实质上是设计出来的,质量的管理只是一种预防和认证的手段

而已。项目计划做项目计划,如同给一个待出生的婴儿写传记那样困难。如果允许项目结束后再写计划

,那就轻松多了,并且可以100%地准确。历史教训让我们明白一个道理:如果一万年以后才会有一条阳

光大道通向共产主义,那么现在就不要忙着砸锅炼钢赶英超美,免得在跑步奔向共产主义时把自己累死

饿死。

PowerBuilder应用开发系列讲座(20)

  p>使用powerbuilder另外500个函数(中)  上期我们介绍了调用windowsapi函数的方法,本期继续

介绍几个常用的api函数。文件拷贝例程windows操作系统在像文件操作一类的低级函数调用方面相当灵

活,而在powerbuilder中为了实现这一些低级操作,开发者们必须用第三方开发库(如:funckyforpowerb

uilder库)或用c语言之类的语言开发自己的库,这种方法我们将在后面的章节中讨论。在这里,我们首先

介绍如何调用windowsapi函数实现简单而又常用的低级操作:文件拷贝。使用windowsapi而不用第三方

开发库的主要好处是:如果这是所要做的唯一低级操作,在发布应用时就不需要同时将额外的库打包进去

。但如果还需使用第三方开发库提供的其它服务,为简单起见,使用第三方开发库所提供的例程可能要更

方便些。实现首先声明下列localexternal函数:functionlonglzopenfile(stringfilename,refws_ofs

tructfilestructure,uintstyle)library"lzexpand.dll"function

用Delphi 压缩Access数据库

usesdao97,dao2000;procedurecompactmdbdatabase(srcdbname,dstdbname,oldpwd,newpwd:string;ba

ccess97:boolean=true);varidbengine:_dbengine;beginifoldpwd<>''thenoldpwd:=';pwd='+oldpwd;

ifnewpwd<>''thennewpwd:=';pwd='+newpwd;ifbaccess97thenbeginidbengine:=createcomobject(dao

97.class_dbengine)as_dbengine;idbengine.compactdatabase(srcdbname,dstdbname,newpwd,dbvers

ion30,oldpwd);endelsebeginidbengine:=createcomobject(dao2000.class_dbengine)as_dbengine;i

dbengine.compactdatabase(srcdbname,dstdbname,newpwd,dbv

用C++Builder操纵Excel

  microsoftexcel作为一个功能强大的电子表格处理软件,已经得到了广泛的应用。在数据库应用软

件开发过程中,如果能实现数据库与excel文件的数据交换,那么一方面能增加数据库数据的来源,另

一方面也能方便用户对数据库数据的进一步处理。c++builder是一个可视化快速应用程序开发工具,

它提供的oleautomation机制使得开发人员在应用程序中就能调用excel,实现数据交换。在c++buil

der中调用excel,首先要为excel建立一个ole对象,然后通过设定该对象的属性和调用该对象的方法来

操纵excel。c++builder通过createoleobject()来建立ole对象;用olepropertyset(propname,val

ue)来设置ole对象的属性;用olepropertyget(propname)获得ole对象的属性;通过olefunction(olef

uncname,[val,...])和oleprocedure(oleprocname,[val,...])来调用ole对象的方法。c++builder

中使用ole自动化操纵excel,必须掌握exc

读书软件做自己的

  不知各位对e_book的读书效果是否感兴趣,它是用vb做的,其实在c++builder中也可以很轻松的

实现类似效果。现在让我们stepbystep吧!  1)新建工程。单元存盘为"read.cpp"  加入一个popu

pmenu;窗体属性设置如下    name:mainform;    autoscroll:false;    borderstyle.:

bsnone;    font:宋体,fontsize:9;    position:poscreencenter;    popupmenu:pop

upmenu1;  2)添加一panel,设置为:    bevelouter:bvnone;    borderstyle.:bssingle;

    ctl3d:false;    name:panel_1;    caption(置空);    color:0x00ce9600;

(淡蓝色)可自定  3)a:把panel_1拉大(任意),在里面添加两个panel,命名为le_pan,ri_pan;   

 le_pan:    color:clblack    align:alleft

Agile programming advice offered

march23,2006agileprogrammingadviceofferedfiledunder:applicationdevelopmenttentipsonhowtom

akeagileprogrammingworkwereofferedattheserversidejavasymposiuminlasvegasonthursday.agilep

rogrammingdeliverssoftwareinshortperiodsoftimeandisgainingalotofattentionlately.althought

hesession,presentedbyclintonbeginofthoughtworks,providedreasonsagileteamsfail,i'llsummari

zethesessionbylistingthe10nuggetsofadvicefeatured.#10.don'tbelievemythssuchas:agiledoesno

tneeddocumentationoris"cowboycoding.""agileissomeofthem

战略联盟的形成与发展机制

在以生产成本为中心来决定竞争绩效的阶段,对某些重要资源的占有决定了企业的竞争地位及优势,这

种优势不仅可以完全决定竞争的结局,而且表现出明显的可持续性。而在网络经济发展的时代,企业间

的竞争与以往相比发生了巨大的变化,企业可以通过战略联盟转化在某些经营资源方面的劣势,竞争优

势将更多地依赖于对投入要素的合理利用,而资源利用率的提高源于技术上的创新和企业间的信息共享

。导言东芝公司是日本著名的大型企业,其在全球化战略和联盟方面的成就是十分引人注目的。特别是

90年代初,在电器产业普遍受到计算机市场增长放慢、半导体产业投资回报率下降以及r&d费用过高等

问题的困扰下,日本厂商由于出口受到限制,加之国内市场的特殊性,其生存发展的环境十分恶劣,企

业经营效益大幅度滑坡。而即使在这样的状况下,东芝公司依旧在国际市场和日本国内市场上取得了很

大的成功,其中,在高技术市场上表现更为突出,到1998年止,销售额已达到259亿美元,而且其弹性

生产法和需求对应型的产品创新机制使东芝公司成为世界市场的先导者之一。本文将以东芝公司为研究

对象,通过对其联盟战略的分析和研究揭示战略联盟的特征和类型。首先我们将简要地从历史的角度审

PowerBuilder应用开发系列讲座(10)

p>  在开发中,我们有时会遇到用一个datawindow来表现数据库中多个表中数据的情形,这时datawin

dow用到的sqlselect语句是一个多张表连接的视图。当我们对这样一个datawindow中的数据进行修改并

提交数据库时,我们将会发现我们并不能简单地使用一条dw.update()来实现同时对数据库中多张表的修

改。  事实上,系统在datawindow中提交数据库并生成update语句时所根据的仍然是图一这个窗口。

在以前的章节中我们曾介绍过利用这个窗口中一些不同的选项实现数据库的并发控制,这里我们再讲一

下这个窗口中的选项对生成update语句的其它影响。  当我们调用update函数时,这个窗口中有四个

域将被涉及:whereclauseforupdate/deletewhere子句的生成依据。这个选项主要是用来进行并发控制

的,这里不再赘述。updatetablecolumns可修改的列。这是一个我们将遇到麻烦的地方。powerbuilder

只能同时对一张要修改的表进行管理,所以我们不能一下子指出所有表中所有要修改的列。在这里我们

只能指出某一张表中要修改的列,以后在程序中用m

如何在状态条中(CStatusbar Pane)加入Bitmap图

以下的代码将演示如何在状态条的第一个方块中显示bitmap图。visualc++4.0以后的mfc的cstatusbar

使用状态窗口通用控制,所以代码与早期版本有所不同。在一个appwizard应用的状态条中加入一个新

的方块,在mainfrm.cpp中加入下列语句//mainfrm.cppstaticuintindicators[]=  id_separator,/

/statuslineindicator  id_indicator_bitmap,  //bitmap状态条  id_indicator_caps,  i

d_indicator_num,  id_indicator_scrl,};从cstatusbar派生一个新类(例如cbitmapstatusbar),并

且用这个新类取代cmainframe中的cstatusbar(mainfrm.h)//mainfrm.h//cstatusbarm_wndstatusbar;

cbitmapstatusbarm_wndstatusbar;在新类的.h和.cpp中加入下面两个函数的声明和定义//bitmapstat

usbar.hclassc

初级:.net框架下的MD5

  近日发现有程序员在.net项目中自己编写md5算法实现,为避免不必要的资源消耗,特撰此文。.n

et框架下md5实现已经集成于system.web.security名称空间,只需简单调用即获取结果:string结果字

符串=system.web.security.formsauthentication.hashpasswordforstoringinconfigfile(输入字符串

,"md5");以下包装函数根据code参数的不同(可取16或32),分别返回参数str的16位和32位md5加密字

串。(16位字串用于模拟动网论坛等国内常见论坛的md5实现)publicstringmd5(stringstr,intcode)

{if(code==16){returnsystem.web.security.formsauthentication.hashpasswordforstoringinconfi

gfile(str,"md5").tolower().substring(8,16);}if(code==32){returnsystem.web.security.formsa

uthentic

WINDOWS XP优化设置和宽带应用技巧

很多人安装了windowsxp后的第一感觉就是windows变得漂亮极了。只是可惜美丽的代价要耗掉我们本就

不富裕的内存和显存。桌面上干干净净让人手足无措,只剩下一个回收站,所有的功能全部通过“开始

”按钮来完成。界面的改变还包括任务栏和“开始”按钮的使用也都有了相当明显的变化。特别是那个

任务栏的分组功能,虽然节省了任务栏的空间,但浪费的时间更多,有些得不偿失。要想恢复到和经典

windows类似的界面和使用习惯,就和我一起进行一下几处更改吧。一、恢复到经典windows界面在桌面

上单击鼠标右键,选择“属性”命令即可进入“显示属性”的设置窗口。这里共有“主题”、“桌面”

、“屏幕保护程序”、“外观”和“设置”五个选项卡。在当前选项卡的标签上会有一条黄色的亮色突

出显示,默认是“主题”选项卡,这里我们只要在“主题”的下拉选单里选择“windows经典”,立即

就可以在预览窗口看到显示效果,同时,外观选项卡的内容也会随之进行更改。注意:windowsxp中“

主题”和“外观”选项卡是息息相关的,只要更改其中的任何一个选项,在另一个选项卡中也会看到相

应的改变。二、恢复“开始”菜单经过一段时间的使用后,感觉

循序渐进学习Power Builder 6.0(17-5)

17.5创建server界面至此,我们已经创建了server库,把clients库中nvo对象移至server库中,定义

并初始化了transport对象,接下去需要定义一个运行server的界面。在钮按栏中按下窗口画板按钮,

选择新建。我们将把这个窗口作为运行server的主窗口,首先在窗口中移中两个按钮,一个,用来启动

服务器的服务进程,取名为“start”,另一个按钮用来中止服务进程,取名为“shutdown”。图17-6

为了程序更加可视一些,我们再定义一个画面,用来标志服务是否正常启动。移入一个picture控件,

点取右键,选择编辑属性命令property,系统弹出对象属性对话框。在filename中点取browse,选入s

top点bmp,ok。当这个画面中的绿灯亮起来时,就认为服务器已经正确启动了,如果画面中是红灯时,

则服务被中止了。调整一下窗口中控件的位置,然后定义这个窗口的属性。我们把这个窗口名定义为“

discountcomputingserver”。接下去,我们来为这两个按钮加上一些适当的脚本,让服务端程序正确

运行起来。打开start按钮的clicked事件。在start按扭

软件项目可行性分析和需求分析(1)

可行性分析是要决定“做还是不做”。需求分析是要决定“做什么,不做什么”。即使可行性分析是客

观的、科学的,但决策仍有可能是错误的。因为决策者是人,人会冲动,有赌博心态。如果可行性分析

表明做某件事的成功率是10%,失败率是90%,倘若该事情的意义非常大,决策者也许会一拍脑袋:“豁

出去,干!”于是这世界就多了一份极喜与极悲。一、可行性分析的四大要素:经济、技术、社会环境

和人目前国内很多软件公司做系统集成项目,如果谈谈系统集成项目的可行性分析将很有意思。可是那

些系统集成项目大多是政府机构的,由于软件行业尚不规范并且客户方存在腐败现象,所以业内流传“

没有做不了的系统集成项目”。软件公司的注意力几乎全集中在“如何拿到项目订单”以及“拿到订单

后如何蒙混过关”上,使我丧失了卖弄“可行性分析”的机会。既然不能正面指点一个人如何做好事,

那么就规劝他不要做坏事吧。二、可行性分析案例——投资软件公司失败的教训。作者本来没有资格谈

论投资,但事有凑巧:近一年来我关闭了一个亏损30万元的软件公司(我自己的);休克一个年亏损2

00万元的软件公司(朋友的);扼杀一个200万元的投资方案(陌生人的);踩灭一个处于萌芽状态

成功测试管理的九大原则

  简介  许多测试管理者是从技术部门进到管理阶层的。尽管他们有可能受过很多测试或软件工程

的培训和指导,但他们还是很难经常从失败和错误中学到管理技巧。作为一个管理者,你有两项基本工

作:找出为你工作的最好的员工并且建立一个能够使员工完成工作的环境(使他们最好地完成工作)。

这篇文章讲述了一些我学过的关于这些管理工作的经验。  总是那些人――帮助人们最好地完成工作

  1.为工作雇佣最好的员工  我遇到许多管理者,他们要雇佣的员工仅仅是他们上一个雇佣的翻

版。作为一个测试管理者,你必须对你需要什么人做出评估。假设现在你的部门满是极好的探索型的测

试员。如果你还要雇另一个探索型的测试员,也许比你现在的要好,但是他对你的空白领域有作用吗?

也许有,也许没有。  工作的最佳人选也许就是你现在这个小组里所没有的类型。最佳人选或许并不

“适合”你通常的工作方式。作为一个测试管理者,雇佣一个最佳的员工要用发展的雇佣策略,面试时

要检验他是否符合这个策略。这可以让你找到最适合这份工作的人员,他能够完成必要的工作。  2

.安排每周与你的每个小组成员在不被打扰的环境进行谈话  最为一个测试经理,主要工作之一就是

定期的评定

使用Eclipse+RDT插件进行Ruby开发

简介本文介绍如何在eclipse中使用ruby开发工具(rdt)插件进行ruby开发。本文将有益于那些想学习如

何使用eclipse基础架构来进行ruby开发的ruby开发者,也有益于对ruby开发感兴趣的java开发者。 

 一、为什么使用ruby?  现在,为什么众多的java开发者都关注ruby?ruby,是10年以前在日本创

建的一种通用目的脚本语言,这是一种纯面向对象的语言。不同于java技术,ruby中的一切都是对象。

ruby的语法主要来源于smalltalk,python和ada。象java编程语言一样,ruby是一种单继承的语言,但

是它提供了一些java技术所没有实现的高级特征,例如闭合(可以认为是一种匿名的内部类)和mix-in(

类似于接口,但是较松地绑定于类上)。ruby也是高度可移植的,能够运行在所有主流的操作系统之上

。  现在,ruby正十分热门。人们正在开始把它应用于各种类型的应用程序。因为它是解释型并且使

用动态类型化,所以你可以在运行时刻实现在java中很难实现的技巧。由动态类型化和富于表达的语法

所实现的令人吃惊的能力之一是它能够用ruby创建域特定的语言(dsl

汉化人介绍之 ChinEase 篇

 ?hinease,中原人氏,目前就职于郑州市一家建筑设计院从事cad辅助设计工作。爱好庞杂,喜欢的

虽多但精通的甚少。崇尚自然科学和竞技体育,特别是足球、围棋等项目,是ac米兰和荷兰国家队的忠

实球迷,除了体育比赛基本不看电视:)  由于工作关系从95年开始接触电脑(不算学校时的basic了)

,从此沉溺其中;99年3月开始上网,更是无法自拔;99年6月在新起点汉化工作室发布第一个汉化软件

,从此走上汉化之路;99年10月,本汉化节点建设成功,在前后一年多的时间里一直利用业余时间为大

家业务地制作一些汉化软件,虽然数量不多、质量有限,但心里倒是一直觉得挺塌实的:)  其实从9

6年开始,出于好玩的原因,在工作之余做过一些dos时代的软件如rar、hd-copy、list等的汉化打发时

光,那时基本上利用pc、diskedit等十六进制工作来完成。虽然比较麻烦但并无太多技巧可言;到98年

初偶然在一些d版光盘上见到一些32位软件如acdsee32、winzip32之类的汉化版,如获至宝之余甚觉惊

奇,于是开始查找一些相关资料和工具进行研究,开始只是利用东方快车之类的工具随意做一些东西给

自己用,质量也太好

使用CFtpFileFind和递归算法来遍历ftp目录

下载本文示例代码微软提供了一个wininet网络编程接口,可以让程序员在较高层次建立internet客户应

用程序.封装了winsockapi来简化网络编程过程.使用wininet提供的十二个类中的一些,使程序员不需要

了解windows套接字的细节,只要几个函数既可完成链接和一些功能.这里给出一个简单的例子,来遍历一

个ftp所有的文件,并输出一个有层次的列表.首先建立一个对话框的程序,其中加入五个文本编辑框,分

别用来输入ftp地址,端口,用户名,密码,和输出列表.再加入一个按钮.分别加入变量如下:cstringm_ho

st;//ftp地址cstringm_username;//用户名cstringm_password;//密码intm_port;//端口cstringm_ft

pinfo;//输出的消息同时还需要在头文件中加入如下几个变量:cinternetsession*m_pinetsession;//

wininet类之一,创建并初始化internet会话cftpconnection*m_pftpconnection;//建立ftp连接intn;/

/用来产生层次的ftp输出目录,因为要

规划SOA(2)构建SOA路线图

在开始任何一段伟大的旅程之前都应该制订一个目标,企业决定实现soa时也不例外。与乘马车出发西

行的拓荒者一样,前方等待的是什么以及如何到达目的地都是未知的。要取得成功,您必须评估自己的

长处与缺点,确定明确的方向,选择一条路线,然后在沿此路线前行的过程中不断重新评估此路线。简

而言之,您必须为您的旅程建立一份独有的路线图。何为soa路线图?为什么需要soa路线图?面向服务

的架构是一种it策略,它将企业应用程序中包含的分散功能组织为可互操作的基于标准的服务,这些服

务可按照业务需求快速组合和重用。只有平衡了企业的长期目标与短期需求,soa的益处才会显现出来

。通过在开始采用soa时就指定一组组织、资金、操作、设计和交付准则,就可保持这一平衡。但“大

爆炸”式的方法是不可取的,应按照循序渐进的学习曲线,选择一种往复渐进的方式来部署架构更改,

这非常重要。大体而言,soa路线图就提供了这样一种往复渐进的方式,使您随着进展得出(重新得出

)您的企业的独有规划。您的soa路线图应包含3个关键特征:成熟:soa路线图应该是不断融入经验和

教训的“活动文档”。soa路线图成熟时,您的soa行动也就以一种可控的方式达到

统一建模语言UML轻松入门之基本概念

  20世纪80年代,随着面向对象技术成为研究的热点,先后出现了几十种面向对象的软件开发方法。

其中,booch、omt和oose等方法得到了广泛的认可。然而,采用不同方法进行建模不利于开发者之间的

交流。而uml则统一了booch、omt和oose的表示方法,而且对其作了进一步的发展。1997年,uml被国际

对象组织omg采纳为面向对象的建模语言的国际标准,它溶入了软件工程领域的新思想、新方法和新技

术。uml不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。数年来,um

l凭借其简洁明晰的表达方式、超凡脱俗的表达能力,一路杀将出来,为业界所广泛认同!目前,在多

数大型企业的正规化开发流程中,开发人员普遍使用uml进行模型的建立。作为一名软件开发人员,我

们必须学会uml。因为uml就是那个统一的"文字",统一的"度"、"量"、"衡",不理解uml,作为软件设

计统一王国的国民,将是艰难而痛苦的。  作曲家会将其脑袋中的旋律谱成乐曲,建筑师会将其设计

的建筑物画成蓝图,这些乐曲、蓝图就是模型(model),而建构这些模型的过程就称为建模(modeling)

。软件开发如同音乐谱曲

利用Visual Basic开发微软代理控件

  一、引言相信广大的程序设计人员对microsoft公司的办公套件office系列产品一定不会陌生,而

且也一定会注意到那个外型古怪的office助手,当我们需要寻求帮助,按下f1键时它就会从天而降,为

我们进行解答,当完成任务后又会慢慢的缩小直至消失。这无疑比寻常呆板的windows风格的帮助友善

许多。会使用户觉的产品的人机界面更加亲切,如果在我们自己的应用程序中也能实现上述功能无疑会

使我们的程序看上去高一个档次。本文就以vb为例对此进行了详细的介绍。二、程序的设计实现micro

softvisualbasic6.0以其简洁的语言、强大的功能、精美的界面和visualc++、delphi、c++builder等

语言一样得到了广泛的应用,尤其是对activex控件方面的编程非常方便简洁,所以本文示例程序选用

vb作为实现语言。打开office目录我们会发现里面有众多的可执行文件和动态连接库以及一些奇怪后缀

的文件,而且向office这么大型的软件一般是要划分为若干个模块的,一个或几个相关功能的文件会单

独以文件的形式存

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27035/viewspace-331160/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27035/viewspace-331160/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值