VC和MFC的详细历史



VisualC++ 1.0:C++编译器的终结者

 

唯技术”思想有时能使陷入一种困境,作为一种编程工具(也可以认为是一种技术),Visual C++经历了许多风波和变革,但纵观目前几乎所以有书籍和文章,很少对这种技术进行“跳出圈外”的思考,这也使我写这篇文章感到无源的苦恼。细想之后,也颇为感慨,愿借此文以激众家之思!

  Visual C++的发展与C/C++语言、Windows的历程是分不开的。

  在C语言推出之前,操作系统等系统软件主要是用汇编语言编写的(如UNIX操作系统)。由于汇编语言依赖于计算机硬件,因此程序的可移植性和可读性就比较差。为了提高程序的可读性和可移植性,并能实现汇编语言的某些功能(如汇编语言可以直接对硬件进行操作、对内存地址进行操作和位操作等)。于是,C语言便应运而生了。

  最初的C语言只是为描述和实现UNIX操作系统而提供的一种程序设计语言。1973年,贝尔实验室的K.Thompson和D.M.Ritchie两人合作把UNIX的90%以上的代码用C语言改写(即UNIX第五版)。后来C语言又作了多次改进,1978年以后,C语言已先后移植到大、中、小及微型机上,现在C语言已成为风靡全球的计算机程序设计语言。

  到了80年代,美国AT&T贝尔实验室的Bjarne Stroustrup在C语言的基础上推出了C++程序设计语言。由于C++提出了把数据和在数据之上的操作封装在一起的类、对象和方法的机制,并通过派生、继承、重载和多态性等特征,实现了人们期待已久的软件复用和自动生成。这使得软件,特别是大型复杂软件的构造和维护变得更加有效和容易,并使软件开发能更自然地反映事物的本质,从而大大提高了软件的开发效率和质量。

  在C/C++发展过程中,C/C++的开发工具也是发展迅速。

  早期的程序员仍然不会忘记TurboPascal的集成开发环境IDE的魅力,IDE能使编辑器和编译器共同工作,在编辑器中写下源代码,使用Compile(编译)命令来启动编译器,当编译器发现错误时,它将编辑光标定位到出错语句处,以便于改正。IDE为程序开发提供一个整体环境。

  C语言产生后,Turbo Pascal发行了Turbo C,Microsoft相应地推出Quick C。虽然Quick C和Turbo C给C编程引进许多内容,但却没有对开发者产生永久性的影响(尽管Turbo C目前仍被用于现行教学中),其主要原因是二者的编辑器都不怎么好(Quick C编辑器后来合并到Microsoft Quick Basic中,现在它作为DOS编辑器Edit.com仍存在于Microsoft Windows 95中),其次,DOS下IDE占据大量内存,使程序运行空间变得很小。

  编辑器之争

  Visual C++在目前的C/C++编辑器占统治地位不是偶然的,这是由微软的正确和对手的错误造成。

  翻开C/C++编辑器历史,战火风云。当Microsoft Visual C++1.0 在C/C++开发工具市场获得了空前的成功之后,Borland的Philippe Kahn也许在和Microsoft的FoxPro For Window一役中被吓到了,因此急于在Visual C/C++ 1.0之后立刻推出新的Borland C/C++以扳回颜面。由于当时Borland失去了许多的人才,Borland C/C++ 4.0仓促推出后,由于没有在最后阶段修正许多的错误,加上加入太多的先进技术,造成了整个产品的不稳定,从而铸成大错,陷入窘境。

  在BorlandC/C++ 4.0失利之后,Borland为挽回局面,立刻着手开发Borland C/++ 4.0的Patch,当时是称为Service Pack。但是在4.01版中并没有完全的解决问题,一直要到4.02才稍为解决一些严重的问题,无奈市场已经起了巨大的变化。

  自BorlandC/C++ 4.0一役大败之后,VisualC/C++虽取得了胜利,但此时在C/C++市场上也加入了另外两个坚强的对手,那就是Symantec C/C++和Watcom C/C++。

  SymantecC/C++的Think C/C++在Macintosh上便是非常有名的编译器,因此早在C/C++领域便有深厚的基础。在Symantec并购了PC上第一个C/C++编译器Zortech C/C++之后,Symantec决定进入了PC的开发工具市场。恰逢Borland C/C++ 3.1的幕后支柱Eugene Wang刚好和Philippe Kahn闹翻,离开了Borland。Symantec重金邀请Eugene Wang,1993年左右,Symantec推出了第一个Symantec C/C++版本,立刻便获得了市场的好评。Symantec C/C++不断完善,以最完美的、先进的集成开发环境获得市场的高度认同。

  WatcomC/C++是以在DOS下能够产生最好的最优化程序代码而闻名的,再加入当时最有名的DOSExtender厂商PharLap公司也是使用Watcom C/C++,因此Watcom C/C++在专业的C/C++程序员以及系统程序员心中是第一品牌的C/C++开发工具。为了顺应DOS向Windows过度,也为了生存,大约也是在1993,1994年左右Watcom终于推出第一个基于Window平台的C/C++开发工具。虽然没有什么特色,但却以编译器的优点成为四大C/C++开发工具之一。

  但是Symantec和Watcom由于自身的实力和发展方向,在1993年初选择了和Microsoft签约,使用MFC做为它们的开发工具的C/C++ Framework。而Borland选择了坚持开发自己的C/C++ Framework,这就是OWL。

  1994年,Microsoft为了对抗Apple和IBM OS2,推出OLE(Object Linking And Embedding)技术,该技术由于可以让Window平台的文件能够内嵌在不同的应用程序中并且能在应用程序中进行编辑,因此“深入人心”。尽管该技术被后来证明是失败的技术,但却使Microsoft取得了C/C++开发工具的胜利。

  由于OLE的复杂性使得Borland无法在OWL中实现此功能,因而就造成了市场的一些负面影响。Symantec和Watcom由于签约的是MFC 1.x的版本,而OLE是在MFC 2.0中的技术,Symantec和Watcom吃了大亏。不久以后,Symantec放弃PC的C/C++开发工具市场,转而开始研发Java开发工具。而Watcom则被新兴而起的Sybase并购,从此消失。

  为了迎合市场,支持OLE技术,Borland在Borland C/C++ 4.5的OWL 2.5中推出OCF,但由于没有MFC的OLE能力强大,也逐渐败下阵来。虽然后来Borland继续推出了Borland C/C++ 5.0,5.02,但终因品质和市场原因而结束。

  随后,Windows 3.0出现了。Windows 3.0尤其是3.1,为个人计算机引进了真正的IDE时代。但是,Microsoft却把精力更多地集中在C编译器的内部支持上,而不是把它的界面升级到一个新的时代。尽管如此,MicrosoftC/C++ 7.0却引入了对C++的支持,并引进了Microsoft FoundationClass库1.0版,完善了源代码。Microsoft C/C++ 8.0成为真正的Windows IDE,这就是Visual C++ 1.0。

  Visual C++1.5之后,微软决定不再将花更多的努力去支持16位编程上。虽然,Visual C++ 2.0仍提供对16位的支持,但它仅用来创建32位程序。

  Visual C++是没有3.0的,版本号直接从2.0跳到4.0,以使Visual C++和MFC同步,但这种同步是短暂的,后来,Visual C++和MFC又使用了不同的版本号。

  Visual C++4.0引入了Internet的支持,并为Internet编程而设计的新类库。

  Visual C++5.0还增加了一些新类,但主要是集中在界面的改善上,并提供一个更好的在线帮助系统、更高级的宏能力和对在开发者组内进行类和其它代码共享的支持。5.0中还合并了Active TemplateLibrary(ATL),并显著地改善了编译器优化代码的能力。

  1998年9月,Microsoft推出了Visual C++ 6.0,它除了保留5.0对ActiveX的支持外,还支持DHTML,更新了MFC及ATL的类库,并对模板也有扩充,用户可以方便地开发出类似Web浏览器界面的应用程序。

  2000年7月,在PDC(Professional Developers Conference)会议上,Microsoft宣布启动.NET方案,推出了一个全新的开发平台Visual Studio.NET,这是Microsoft技术方向的重大转变。在这个平台上,包括了Visual C++、Visual Basic、Visual FoxPro和C#等开发工具。
2002年2月推出的Visual Studio.NET虽然有许多不近人意的地方,但是却让我们领略了它的强大之处。Visual C++.NET除对Microsoft.NET Framework支持和界面及文档的语言本地化这两个最显著特点外,它与Visual C++6.0相比,还包含其他许多新的特性,如Web应用程序、C++托管扩展、ATL、DCOM、MFC等方面的增强以及ATL Server、的支持等。

  2002年底推出Visual Studio .NET 2002,2003年4月,Visual Studio .NET 2003发布。Visual Studio .NET 2003 包含 Windows .NET Framework 的一个增强版本,并将移动和嵌入式设备,如 Pocket PC 和其他采用 Microsoft Windows CE.NET 操作系统的设备,带入了 .NET。

  Visual C++.NET 2003对2002版本进行了许多更新和优化,除界面、库作了改进之外,还对在 C++托管扩展中创建的Windows 窗体应用程序提供设计器的支持以及提供对项目中生成自动化模型的支持等。

  MFC和Visual C++

  Visual C++的核心是Microsoft基础类库,即通常所说的MFC。MFC相当彻底的封装了Win32软件开发工具包(Software Development Kit,即通常所说的SDK)中的结构、功能,它为编程者提供了一个应用程序框架,这个应用程序框架为编程者完成了很多Windows编程中的例行性工作,如管理窗口、菜单和对话框,执行基本的输入和输出、使用集合类来保存数据对象等等,并且,MFC使得在程序中使用很多过去很专业、很复杂的编程课题,如ActiveX、OLE、本地数据库和开放式数据库互联(Open DatabaseConnectivity,简写为ODBC)、Windows套接字和Internet应用程序设计等,以及其它的应用程序界面特性,如属性页(也叫标签对话框)、打印和打印预览、浮动的和可定制的工具条变得更加的容易。

  早在1989年,Microsoft的程序员们开始试图将C++和面向对象的编程概念应用于Windows编程中,以编写出一个可以使Windows编程更加简便的应用程序框架。他们把这个应用程序框架叫做AFX (AFX这个词来源于Application Framework,但奇怪的是这个词组中并没有包含“X”这个字母)。直到今天,AFX小组早已不存在了,AFX这个名称也于1994年初不再使用,但在Visual C++和MFC中,AFX的影子却随处可见,很多全局函数、结构和宏的标识符都被加上了AFX的前缀。

  最初的AFX版本在经过一年的艰苦之后诞生,却未能被大多数Windows程序员所接受。AFX的确是经过了精心的规划和编码,并且,它也提供了对Windows API的高度抽象,建立了全新的面向对象的AFX API,但最要命的是AFX API库根本不兼容于现有的Windows API。由此导致的最严重后果是大量的SDK代码无法移植,而程序员将学习两种完全不同的编程方法。

  AFX不得不重新做所有的一切,他们所创建的新的应用程序框架是一套扩展的C++类,它封装和映射了Windows API,这就是MFC的前身。过去的AFX小组也变成了MFC小组。最终,MFC的第一个公开版本于1992年3月随Microsoft C/C++ 7.0一起推出。那时距Windows 3.1发布尚有好几个月。在MFC 1.0中还没有文档/视结构,但有类CObject和CArchive。在12个月之后,MFC 2.0随Microsoft新的编程工具Visual C++ 1.0一道出炉。与MFC 1.0一样,MFC 2.0仍是16位的,因为32位的Windows NT 3.1直到1993年7月才问世。在MFC 2.0中,增加了对文档/视结构、OLE 1.0、Windows 3.1公用对话框的支持和消息映射等。在Windows NT 3.1面世一个月以后,Microsoft推出了32版本的Visual C++和MFC 2.1,它实际上是MFC 2.0的Win32接口。

  最后一个16位的Visual C++编译器是1993年12月推出的Visual C++ 1.5,直到今天,一些为Windows 3.1编写16位应用程序的程序员还在使用这个版本。1994年9月,32位的MFC 3.0伴随着Visual C++ 2.0的一道面市,在今天的计算机图书市场上,还有着大量的关于Visual C++ 2.0和MFC 3.0的图书出售,因此,可以想象得出Visual C++ 2.0所取得的成功和它所产生的影响。

  但是,在Visual C++5.0中包括的MFC版本不是MFC 5.0,而是MFC 4.21。发展到今天,MFC已发展成一个稳定和涵盖极广的C++类库,为成千上万的Win32程序员所使用。MFC库是可扩展的,它和Windows技术的最新发展到目前为止始终是同步的。并且,MFC类库使用了标准的Windows命名约定和编码格式,所以有经验的Windows SDK程序员很容易过渡到MFC。MFC结合了Windows SDK编程概念和面向对象的程序设计技术,从而具有极大灵活性和易用性。

 

 


最近开始对windows编程起了兴趣,可能是快要工作的原因吧。在大学里学了些C/C++的东西,研究生也基本上在研究机器学习方面的算法,

对于软件开发只是有这心无力。找码农的工作很是受挫,还好最后找到了工业界的软件开发工作,虽然远离了原本打算的互联网行业,但是

多少也还算是软件开发人员吧。

 

对于软件开发人员来说,一个系统平台还是很重要的。我以后的工作不出意外的话应该是在linux平台,前一段时间研究了许多基本的linux知识,

学习了lamp架构,开发了Android应用,对于网站技术Javascript,XHTML,CSS也深入学习了一下。也算是像个程序员的样子了吧。

 

不过最近公司让我先学习一些它们之前的程序的使用,技术员让我学习windows方面的知识,我就调研了一下基于windows开发的一些技术。

近来研究了COM技术,但是觉得只是理解了原理,自己编起来很不方便,得用MFC或者ATL,但是对于MFC不是很熟悉,以前用过只是开发一些

简单的界面,不是很了解其中的原理。于是我决定把这些技术再简单的学习一遍。

 

说起windows编程,得说到90年代初期,windows3.0开始之后基于windows的编程技术才开始起步,那是微软推出win32SDK,也就是windows系统

的API接口,windows程序员可以通过调用windows提供的API来进行windows程序的编写工作。但是很快微软技术人员发现win32API函数太难记忆了,

一个函数的参数往往有六七个,每一个又有好多宏定义,编写起来相当的繁琐。所以开始使用C++类的思想将这些API封装起来,其实这个工作在1990年

左右就开始研究了,到1992年推出了MFC1.0,是和MicrosoftC/C++ 7.0(VC++IDE的前身)一起发布的,从此MFC开始走上了历史的舞台,一直辉煌了

十年之久。

 

MFC非常了庞大,几乎是那是在windows上开发图形界面的首选类库,所以即使到现在,市面上介绍MFC的书依然很多,许多介绍VC++开发的书籍也就是

讲解MFC的,2001左右深入浅出MFC这本书几乎是每个windows程序员必备。

 

      COM技术也是90年代的产物,大约93年开始,组件对象复用技术在微软操作系统中流行起来,起先叫OLE(对象连接与嵌入)技术,OLE最早解决在文字处理

程序中嵌入表格处理程序,就像是在word里面也可以编辑excel的表格。这个问题主要是两个进程间通信问题,OLE最早使用的是DDE(动态数据交换)技术来

实现进程通信的,后来使用了COM技术来进行交换数据。后来OLE技术基本上是被淘汰了,而COM技术开始兴起,到98年左右COM技术达到了巅峰。主要是

MFC的全面支持,以及微软为简化COM编程又推出了一套类库ATL类库。COM技术应用到了互联网上,就成了ActiveX技术。

      98年很多人认为之后将是COM的天下。COM(组件对象模型)不仅仅是一种进程通信的方式,也是一种软件架构的方式。组件式的架构可以让软件更加灵活。

未来的软件应该是许多模块组装起来的。可以对其中的一个组件进行升级,而不用改变其他的模块,也不用重新编译已经发行的程序,只要组件提供的接口保持

不变即可。

     COM另一个比较厉害的特性是语言无关性,它只定义(dll,exe)二进制接口的内存布局,至于这种二进制接口是由什么语言定义的就不用管了。这样C++编写的

语言VB就可以使用了(这两个在90年代的主流语言),当然对于解释性的语言VBA等也可以中,这种语言广泛应用在execl等软件中。所以COM技术实现了不同软件之间

的互连互通。

    COM是一种二进制代码的复用方式,是一种进程之间通信的方式,可能有人会说这两个问题的解决方案有很多,比如说DLL就是可以动态链接的,就可以提供二进制

代码复用功能,RPC技术可以实现进程间的通信等。没错,COM是基于这些技术之上的技术,它规定了二进制在内存中的布局。它也正是利用DLL的动态链接来实现的

进程内服务器,对于进程外服务器用的是RPC来进行底层通信的。

    所以COM技术确实很给力,可是COM也很难,一方面概念比较多,另一方面实现起来也很难,微软为了简化这一技术,在MFC中加入了相关类来支持COM,但是这种

支持还是有限的,毕竟MFC不是专门干这个的,于是又推出了ATL(activetemplate library),这一类库是专门为编写COM组件服务的。熟悉STL的应该都知道,ATL已

大量使用了模板技术,这是C++一种比较高深的技术,所以ATL不是那么简单能学的。它需要开发人员对COM原理很熟悉,并且要对ATL的某些源码也有所了解才可以。

所以利用ATL开发COM组件不是一件容易的事,它需要对自动生成的类进行细致的调整,难度远远大于MFC的开发。

   可能大家都知道98年微软推出的VC++ 6.0IDE成了C++的经典IDE,现在还有人用,相比vs2005,2008,2010,2012,其要小巧很多,只有几十M左右,而vs2010动辄7,8个G。

在运行方面VC6.0需要的内存资源很少,占有CPU也很少,而vs2012甚至要求win7以上系统的支持。对于5,6年前买的笔记本肯定是吃不消的。VC6.0对C++的标准的支持也

还是可以的,虽然和现在的还是有很大的差异,不过对于简单的学习应该够用了。

    VC6.0集成了MFC6.0以及ATL3.0。一度成为了经典中的经典。

 

    可是进入千年之后,大唐的太阳开始落下了。2000年微软开始了.net平台的探索。我觉得主要是解决软件的兼容性问题。微软的产品一直没有很好的兼容性,除了自己能兼容自己之外,其他的都兼容不了。软件兼容性主要包括语言无关性和移植性。.net框架都可以做到。.net 平台的发布同时,发布了C#语言,他是为.net平台而生的。它支持.net的所有特征。其实我理解的.net技术就是一个强大的类库,加上中间运行机制。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Borland C++3.1 神话般的经典开发工具 带有传奇色彩的BORLAND公司,见证了美国软件技术市场上波澜壮阔、激动人心的技术大战和产品大战,最为经典的成功范例就是Borland C++3.1! Borland是中国程序员最为景仰的公司之一,特别是对于资格老一点的程序员而言,他们学习编程的起步就是Borland. 以下是Borland c++入门指南中摘录的一些信息 Borlandc++适用于需要一个专业化、优化的编译器的C++和C程序员,它同时适用于A&T公司的C++2.1版和ANSIC的程序员。它快速而有效,据此用户可以创建包括Microsoft Windows应用程序在内的任何应用程序。 Borland C++3.0可以在DOS的环境下运行,更可以在Windows下运行,在Windows之下的Borland C工作环境更亲切,将使您开发程序更得心应手。 C++是一个面向对象(OOP)的程序设计语言.使用户能充分利用OOP的先进设计方法和省时效率高的特点,它是C语言的进一步发展,它是可移植的,所以用户可以很容易地将一个由C++编写的应用程序从—个系统移植到另一个系统。在任何地方,都可以用C++从事任何编程工作。 Borland C++特色 1. Borland C++3.0及3.1可供程序设计人员开发C++及c程序。其中的c++是依照AT&T2.1标准设计的,而C则是ANSI C。因此让您开发的程序兼容性高.移植性(Portable)也更强。 2.全局的优化(Global Optimization):为程序编译出最优的目的码,使执行时间减少,使目的码变小。 3.缩短编译时间:由于编译器及工具的使用,大大减少了编译时间。 4.集成开发可境:(即IDE,Integrated Development Environment),本产品提供一完整的工作平台(Platform),使程序的编写编译、调试、分析、运行相当完整且方便。 5.窗口程序开发:本产品可以开发出Microsoft Windows程序,还包括完整的工具程序:窗口资源编译器(Resource Compiler),在线帮助编译器(Help Compiler)及窗口资源工作程序(Resource Workshop)。 6. DPMI编译器:DPMI (DOS Protected Mode Interface)使编译器可以在DOS或Windows386的保护模式下运行,因此开发大型的程序不用担心内存不足。 7. Easywin:或将DOS程序直接转成Window。程序的功能,不需要改半行令。 8. WinSight:窗口信息跟踪程序,使我们看到程序与Windows之间的联系息。 9.在线帮助,在IDE环境下,任何错误都可由在线帮助得到说明或者想要任何时间查询函数或其他说明,都可使用此项功能。 10.虚拟Run - time面向对象存储管理功能(VROOMM,Virtual Run-time Object-Oriented Memory Manager)。当程序设计人员选定目的码的覆盖功能后,VRAOOMM会处理一切事情,即使程序超过640K。 11.丰富的类库,本产品提供常用的数据结构,例如List, Queue, Qegue, Stack, Array. . 等。 12.丰富的函数库:本产品提供4, 5百个函数,可以说无所不包了。 1.2.1. Borland C++3.1新功能 1. 3.1版将Turbo C++ for Window。改名为Borland C++for Windows, 2. 3.1版配合Windows 3.1版,增加多媒体(Multi-Media)、笔(Pen)和MCI (Media Control Interface)之控制接口。 3. 新增Win Spector I具程序,此工具程序是当Windows程序发生General Protection Faults时,提供发生此错误的地方,及当时机器的状态。 4. 在Borland C++ for Window,提供最优化的选项。 5. 彩色语法高亮显示(Color Syntax Highlighting),在源程序中设置不同的显示的颜 色。可在DOS IDE内的Options I Environment I Colors I Edit及Windows IDE内的Options Environment I Highlight内设置。 6. 可利用参数(-3)或IDC内的Options I Compiler I Advanced Coded Generation 80368设置产生386的目的码。 7. 可在程序内控制最大打开文件数,在_NFILE. H内#DEFINE_NFILE_n改变n的数值,要注意的是n必须小于等于Config.sys内的files数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值