将你的Visual Basic 6.0移植到Visual Basic.NET

    技术2022-05-11  162

    将你的Visual Basic 6.0移植到Visual Basic.NET

    摘要:本文推荐给那些准备将自己的应用移植到Visual Basic.NET中的Visual Basic开发者。文章中包括Visual Basic.NET的新特性、升级工具的信息的介绍以及将Visual Basic 6结构平滑升级到Visual Basic.NET的指导

    标题什么是Visual Basic.NET?为什么Visual Basic.NET 没有提供100%的兼容?升级到Visual Basic.NET 同时在Visual Basic 6.0和Visual Basic.NET中工作

    基本结构介绍    基于浏览器的程序    服务器/客户工程    单层一应用程序    数据    语言方面的改进

    升级    Variant到Object    Integer到Short    Property语法    Visual Basic窗体到Windows窗体    界面

    升级报告既注释    编程方面介绍    使用事先绑定(Early-Binding)    数据的存储    无参数的缺省属性    Boolean数据类型    避免Null传播    使用0下界数组    使用常量而不使用常量代表的值    用户自定义类型中的数组以及定长字符串    避免遗传作用    Windows API调用    对窗体以及控件的考虑

    总览:    本文推荐给那些准备将自己的应用移植到Visual Basic.NET中的Visual Basic开发者。文章中包括Visual Basic.NET升级工具的信息的介绍以及将Visual Basic 6结构平滑升级到Visual Basic.NET 的指导    在打开Visual Basic 6.0工程时Visual Basic.NET会自动升级,但是在绝大多数情况下你需要对在Visual Basic.NET下打开的Visual Basic 6.0程序做一些改动。这篇文章的用途就是时你对原来的程序的改动尽可能的少以及有效。注:Visual Basic.NET仍然处于开发中,所以下面的一些细节可能还会有改动,下面的指导不保证在最终的产品出来后代码不需要改动。

    什么是Visual Basic.NET?    Visual Basic.NET是下一代的Visual Basic。而并不是简单的在Visual Basic 6.0上在添加一些新特性而已,微软重新设计了产品以便使开发者能够更加容易的开发分布式应用,例如基于WEB的程序以及多层系统。    Visual Basic.NET中有两种窗体包,Windows窗体以及Web窗体;一个新版的ADO用于接受离线数据源;新的语言,移走了原来的关键字,提高Type数据的安全性以及提供低级别结构以满足高级别开发者的需求。    这些新的特性为Visual Basic开发者提供了新的开发窗口:通过Web窗体以及ADO.NET,你可以快速开发可扩展的Web站点;通过继承,该语言实现了真正的支持面向对象编程(object-oriented programming);Windows窗体本身支持可视继承;现在展开程序就象拷贝可执行文件和控件到另一个目录那样简单。    Visual Basic.NET现在完全集成在其它的Microsoft Visual Studio .NET语言中,不仅可以通过不同的语言开发组件,而且通过交叉语言继承,你可以从用一种语言编写的类中派生用另一种语言编写的类。

    为什么Visual Basic.NET不提供100%的继承性?    当在设计Visual Basic.NET时有两个方向:翻新以及完全新建。为了体供给用户尽可能多的新特性(例如继承以及线程),为了提供对新平台的完全访问,以及为了使Visual Basic能够完全转移到下一代的Web应用中。正确的选择是完全新建。

        例如,很多在Windows窗体中的新特性可以通过在现有的代码中添加新控件以及属性来实现。但是这样就会牺牲新的Windows窗体的很多内在特性,例如安全以及可视继承性。

        一个重要的目标是使Visual Basic代码可以完全集成到用其它语言编写的代码中,例如Microsft C#(读C Sharp)或者Visual C++。以及让Visual Basic开发者可以完全而且简单利用.NET框架的功能,而不需要象原来那样使用Windows API调用。所有的Visual语言将与其它面向通用运行时语言(Common Language Runtime)的语言使用相同的数据定义类型、数组、用户自定义数组、类以及界面。不过这样就要做一些牺牲,例如固定长度字符串以及以非0数为下界的数组将不再被支持。

        Visual Basic现在已经成为一个真正面向对象语言,一些不一致的特性,例如 GoSub/Return语句以及DefInt已经从新语言中移走了。    这样的结果是使Visual Basic更加具有活力,使其成为一种开发基于Windows应用的最有效的工具之一,同时也是开发下一代的Web站点的最佳工具。

    升级到Visual Basic.NET    Visual Basic.NET原则上可以使传统的Windows开发者转移到建立下一代Web以及多层应用中。所以,你的代码需要升级以适应Visual Basic.NET    在你使用Visual Basic.NET打开Visual Basic 6.0工程后,通过自动升级工具可以一步步的升级并建立一个新的基于Visual Basic.NET的工程。这个升级是单向的,既新的Visual Basic.NET工程无法再在Visual Basic 6.0中打开。    当工程升级后,Visual Basic.NET会修改语法的改变以及将Visual Basic 6.0窗体转换为Windows窗体。在通常情况下,你还需要手工做一些修改,因为自动升级工具不可能替你做所有的事情。    为帮助改变原来代码,当你的工程升级以后,Visual Basic.NET会在工程中添加“升级报告”列出所有的问题,同时在代码中添加注释提示你需要做的改动,这些注释会以“TO DO”列表形式列出在任务列表窗口中,所以你可以很容易的需要改变的部分,要想浏览相关的代码只需要双击任务列表中的相关项就可以了。每一个任务以及升级报告中的列表项都有相关的在线帮助标题以给你更多的帮助。

    让Visual Basic 6.0和Visual Basic.NET同时工作    Visual Basic.NET支持升级Visual Basic 6.0生成的工程,如果你的工程是在VB 1-5下编写的,你需要首先升级道Visual Basic 6.0工程,编译、保存后再升级到Visual Basic.NET。    Visual Basic.NET和Visual Basic 6.0可以安装在同一系统下并可以同时运行。同样的,利用较早版本或者其它语言编写的COM组件也可以集成到Visual Basic.NET中。例如你可以拖-放一个Visual Basic 6.0编写的ActiveX控件到Visual Basic.NET的Windows窗体中,在Visual Basic.NET的类中使用Visual Basic 6.0的COM组件。    Visual Basic.NET编译的组件同Visual Basic 6.0编译的组件有一点点的不同,Visual Basic.NET对象是通过垃圾收集方式释放的,所以在对象被删除到对象真正被从内存中释放之间或许会有一定的延迟。    另外,Visual Basic.NET提供了Visual Basic.NET组件同Visual Basic 6.0之间的二进制兼容性。现在展开一个组件变的比以往更加容易,配置一个组件文件只需要简单的拷贝文件到目录就可以了(不需要regsvr32)。将组件升级到新版本之需要以新文件覆盖就文件就可以了。你所要做的只是确定新组件的类同方法同旧组件兼容。

    结构介绍    .NET平台提升了上一个版本平台的结构,对于应用的可伸缩性和分布特性提供了更好的支持。例如离线数据访问、基于HTTP的消息传递文件配置。要获得以上特性,你需要使用Visual Basic.NET。

    基于浏览器的应用Visual Basic 6.0和Visual Studio 6提供了以下的技术用于建立基于浏览器的Internet和Intranet应用:WebclassesDHTML projectsActiveX documentsActive Server Pages (ASP)

        Visual Basic.NET中引入了ASP.NET,ASP.NET是增强版的ASP,并加入到了Web窗体(Web Forms)结构中,Web窗体是.NET架构中非常重要的一个组成部分。一个Web窗体包含两个部分:HTML文件和源程序文件。HTML文件用于描述页面;源程序文件用于响应、控制页面事件。建立一个Web窗体同现在建立一个VisualBasic窗体一样简单。它的WYSIWYG 界面设计方式同现在的Visual Basic是一样的。下面的图片演示了一个Web窗体的设计:(附加图片Webforms1.gif)

        Web窗体运行于服务器上,产生基于HTML3.2标准的HTML页面发送到客户端。这一点同ASP相同,但是由于Web程序是编译执行的,同解释执行的ASP比较起来速度要快很多。

        下面是对将Visual Basic 6.0开发的基于浏览器的应用无缝转移到Visual Basic.NET上的一些介绍以及结构方面的建议。

        我们建议你使用微软多层构架来开发你的应用,利用ASP来开发界面,同时使用Visual Basic 6.0或者Visual C++ 6.0开发的COM组件,Visual Basic.NET完全支持ASP,你可以同时使用ASP、ASP.NET、Web窗体来扩展你的应用。同时Visual Basic 6.0或者VC6商用组件可以不经升级获修改直接在Visual Basic.NET中使用。

        包含DHTML页面以及客户端DLL的DHTML 应用不能自动升级到Visual Basic.NET。我们建议你在Visual Basic 6.0下开发这些应用。同DHTML工程一样,ActiveX Documents不被Visual Basic.NET支持。不能自动升级。我们建议:或者在Visual Basic 6.0下开发ActiveX Documents或者将ActiveX Documents转换为用户自定义控件。不过 ActiveX documents 和 DHTML应用程序可以集成到Visual Basic.NET技术中。

        Web类(Webclasses)在Visual Basic.NET中将不再存在。Web类应用将升级到ASP.NET;不过,在自动升级后你还需要做一些更改。现存的Web类应用可以集成到Visual Basic.NET的Web窗体和ASP应用中,但是在新工程中,我们建议在新工程中使用ASP的Windows DNA平台。关于更多的关于Windows DNA的信息,请访问微软DNA站点:http://msdn.microsoft.com/isapi/gomscom.asp?Target=/dna/

    客户/服务器工程Visual Basic 6.0提供以下技术用于建立客户端/服务器应用:Visual Basic窗体Microsoft Transaction Server (MTS)/COM+中间层对象用户控件

        Visual Basic.NET提供了新的窗体包:Windows窗体。相对于Visual Basic 6.0的窗体,Windows窗体使用不同的对象模块,不过绝大部分是兼容的。当你的工程升级时,Visual Basic窗体自动升级到Windows窗体。下面是Windows窗体的示例:(附加图片windowsforms1.gif)

        对于开发中间层的MTS and COM+ 服务器组件,Visual Basic.NET提供了更强大的支持。使用统一的调试器,你可以从 客户端到MTS/COM+组件再到客户端进行步进调试。同时集成调试器也支持在MTS 和 COM+ 组件内部进行调试(组件需要以native code方式编译,包含符号调试信息以及不进行优化)。

        Visual Basic.NET同样也提供了新的中间层组件:Web Services(Web服务器)。Web服务器包含在ASP.NET中,其结构如下图所示:(附加图片webservices.gif)

        通过使用HTTP传递允许方法请求可以通过防火墙传递。数据的传递使用基于工业标准的XML,允许其它语言以及平台访问它们的功能。尽管不再支持MTS事务,但是你还是有理由将你的应用升级到Web Server,如果你不仅需要分布式事务处理而且需要跨平台操作。通过Visual Basic.NET你可以通过简单的拖-放操作来完成。

        当你的工程升级后,用户控件会升级到Windows控件;然而,自定义属性标记设置以及加速键设定不会升级。

    单层应用Visual Basic 6.0支持建立以下类型的单层应用程序:单层数据库应用程序Visual Basic插件普通的应用程序以及游戏。

        单层数据库程序的代表就是使用Visual Basic访问微软Access数据库。这些应用可以有限制的升级到Visual Basic.NET    现在Visual Basic.NET集成开发环境(IDE)已经完全集成为Visual Studio.NET IDE的一部分,Visual Basic.NET包含新的中性语言(language-neutral)的扩展模块Visual Basic.NET的插件现在就等同于Visual Studio.NET add-ins,你可以利用Visual Studio.NET中的任何语言来开发插件。例如,你可以编写一个Visual Basic.NET插件来绘制Visual C#窗体的颜色或者为VB类添加注释。为了支持这些新的功能,Visual Basic.NET已经不再支持旧的扩展模块,你需要更改原来程序中的扩展对象。

        很多程序被规于应用程序(Utility programs)。应用程序需要操作文件、设置注册表。对此,Visual Basic.NET也提供了新特性。例如意外句柄可以捕捉文件系统错误,使用注册表类可以勇于操控注册表。需要注意的是,一些依赖于系统性能特征(performance characteristics)的程序,例如游戏需要做改进,因为Visual Basic.NET提供了新的系统性能特征,对于Visual Basic.NET下的游戏开发,你可以使用微软DirectX7,或者使用新的GDI:GDI+,GDI+包含了很多新特性,对简单的2-D游戏提供了Alpha混合、反锯齿支持以及更多的图像文件格式的支持。

    数据库操作Visual Basic 6.0提供了以下类型的数据库访问方式:ActiveX Data Objects (ADO)Remote Data Objects (RDO)Data Access Objects (DAO)

        Visual Basic.NET包含了增强版的ADO,称之为ADO.NET。ADO.NET的目标是操作离线数据。同时对于ADO的分布应用提供了更强大的支持。ADO.NET提供了绑定数据库到Windows窗体控件和Web窗体。    通过做一些小的更改,DAO,RDO,ADO仍然可以在Visual Basic.NET中使用。然而,Visual Basic.NET不支持DAO和RDO数据库到控件、数据库控件或者RDO用户连接的绑定。我们建议在应用中包含DAO和RDO的应用或者仍然使用Visual Basic 6.0开发或者再升级到Visual Basic.NET前将它们更改为ADO数据绑定。

    语言方面的改进    我们在很多的编程论坛或者新闻组中可以看到C++的拥护者将VB称为一个玩具语言(Toy Language)。其中VB最被人诟病的是它不真正支持面向对象编程(oop)。在新的Visual Basic中,这些都将成为过去。Visual Basic.NET将真正支持oop。继承(inheritance)、多态(polymorphism)以及重载(overloading)。当然还不止这些。包括一些新的数据结构、结构性的错误控制(Error Handing)以及线程。这些都将被新的VB所支持。

    继承    假设你编写了一个只包含一个函数的名称为BaseClass的基本类:        Function GetCustomerName()    ' Do some stuff    End Function

        如果你想建立一个新类,并使用BaseClass中的GetCustomerName函数。但有不想重写一编代码。那么通过继承,你可以这样编写新类:

        Inherits BaseClass

        Function GetCustomerID()    ' Do some stuff    End Function

    重载    重载就是建立两个具有同样你名称但是参数属性不同的函数的过程。假设有GetCustomID函数根据输入输出用户的ID号码。那么该函数可能有以下两种类型:

    Function GetCustomerID(custname as string) As Integer' 通过用户名获得用户IDEnd Function

    Function GetCustomerID(purch as long) As Integer' 根据购物单号码获得用户IDEnd Function

    通过重载,你就可以根据不同类型的输入调用同一个函数。实际上现在的VB在某种程度上提供了重载的功能,考虑下面的函数:

    Function GetCustomID(vIN As Variant) As Long    GetCustomID = vINEnd Function

    你可以以下面两种方式调用

    ID = GetCustomID("123")或者ID = GetCustomID(123)

        那么为什么还要在新版本中引进重载呢?这是因为新的Visual Basic引进了新的特性:类型安全(default type safety)。在Visual Basic.NET中,Variant类型将不复存在,详细的介绍看下面关于升级部分的内容。

    多态    多态是在一个类中重新定义一个函数的过程。例如你需要建立一个基于BaseClass类的子类,但是又需要重新编写GetCustomerName函数,在新版的VB中,你就可以这样写:

    Inherits BaseClass

    Function GetOrders()Overrides Function GetOrders()...End Function

    线程    新的Visual Basic语言结构部分将包含建立多线程,一个线程建立的范例如下:

    set t = New Thread(New Threadstart                  (AddressOf(BaseClass.Function1))

        从上面的范例还可以看到,Visual Basic.NET中的AddressOf函数将真正返回函数的指针。这在进行API调用,例如回调函数方面将是很有帮助的。

    错误处理(Error Handling)    Visual Basic.NET的另外一个大的改进就是错误处理。Visual Basic将提供try…catch…finally结构,就象Delphi中的那样(微软的原文是:just like those "respectable" languages :-))。例如:

    Sub SafeWrite()Try  Open "Testfile"  ...  Write #1Catch   Kill "Testfile"Finally   Close #1End TryEnd Sub

    升级    当代码升级后,Visual Basic.NET会建立一个新的升级工程。下面通过几个例子来说明你的代码做了那些升级

    Variant类型到Object类型    以前版本的Visual Basic支持Variant数据类型,该类型可以设定为除了固定程度字符串外的任何原始数据类型和Empty,Error,Nothing和Null。在Visual Basic.NET中,Object数据类型可以设定为任何原始数据类型和Empty,Error,Nothing,Null和对象指针。当你的工程升级到Visual Basic.NET后,任何Variant定义都会改变为Object。同样,当你在编辑器中插入代码时,Variant关键字也会被替换为Object。

    Integer数据类型到Short数据类型    在Visual Basic 6.0中,16bit数现在称为Short。32bit数称为Integer(64bit数称为Long)。当工程升级后,数据定义会做如下改动:

    Dim x As Integerdim y as Long更改为:

    Dim x As Shortdim y as Integer

    属性语法    Visual Basic.NET对于自定义属性的语法作乐更加直观的更改,将Get和Set合而为一。例如原来的属性如下:

    Property Get MyProperty() As Integer    m_MyProperty = MyPropertyEnd PropertyProperty Let MyProperty(NewValue A


    最新回复(0)