《Visual-Basic-管理信息开发案例--第5-7章-第7章-将VB6.0程序移植到VB.net课件.ppt》由会员分享,可在线阅读,更多相关《Visual-Basic-管理信息开发案例--第5-7章-第7章-将VB6.0程序移植到VB.net课件.ppt(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 第第7章章 将将VB6.0程序移植到程序移植到VB.net 7.1 什么是什么是Visual Basic.NET(VB.net)7.2 VB.net程序的基本结构程序的基本结构 7.3 如何进行程序升级如何进行程序升级 第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 在线教务辅导网:在线教务辅导网:http:/教材其余课件及动画素材请查阅在线教务辅导网教材其余课件及动画素材请查阅在线教务辅导网QQ:349134187 或者直接输入下面地址:或者直接输入下面地址:htt
2、p:/第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.1 什么是什么是Visual Basic.NET(VB.net)Visual Basic.NET是最新一代的Visual Basic语言。它并不是简单地在Visual Basic 6.0 上添加一些新特性而已,微软重新设计了产品以便使开发者能够更加容易地开发分布式应用,例如基于Web的程序以及多层系统。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net Visual Basic.NET中有两种窗体包:Windows窗体以及Web窗体。一个新版的ADO.NET用于
3、接受离线数据源。新的语言,移走了原来的关键字,提高Type数据的安全性以及提供低级别结构以满足高级别开发者的需求。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.1.1 为何VB.net不提供100%的继承性 当在设计Visual Basic.NET时有两个方向:翻新以及完全新建。为了提供给用户尽可能多的新特性(例如继承以及线程特性),为了提供对新平台的完全访问,以及为了使Visual Basic能够完全转移到下一代的Web应用中,正确的选择是完全新建。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 一个重要的
4、目标是使Visual Basic代码可以完全集成到用其他语言编写的代码中,例如Microsft C#(读C Sharp)或者Visual C+,以及让Visual Basic开发者可以完全而且简单地利用.NET框架的功能,而不需要像原来那样使用Windows API调用。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 所有的Visual语言将与其他面向通用运行时的语言(Common Language Runtime)使用相同的数据定义类型、数组、用户自定义数组、类以及界面。不过这样就要做出一些牺牲,例如固定长度字符串以及以非0数为下界的数组将不再被支持。
5、Visual Basic现在已经成为一个真正面向对象的语言,一些不一致的特性,例如 GoSub/Return语句以及DefInt语句已经从新语言中移走了。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.1.2 如何将VB6.0程序升级到VB.net Visual Basic.NET原则上可以使传统的Windows开发者转移到建立下一代Web以及多层应用中。所以,用户的代码需要升级以适应Visual Basic.NET。在使用Visual Basic.NET打开Visual Basic 6.0工程后,通过自动升级工具可以一步步地升级并建立一个新的基于V
6、isual Basic.NET的工程。这个升级是单向的,即新的Visual Basic.NET工程无法再在Visual Basic 6.0中打开。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.1.3 让VB6.0和VB.net同时工作 Visual Basic.NET支持升级Visual Basic 6.0生成的工程,但如果该工程是在Visual Basic 15版本下编写的,则需要首先升级到Visual Basic 6.0工程,编译、保存后再升级到Visual Basic.NET中去。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到V
7、B.net VB.net Visual Basic.NET和Visual Basic 6.0可以安装在同一系统下并可以同时运行。同样,利用较早版本或者其他语言编写的COM组件也可以集成到Visual Basic.NET中。Visual Basic.NET编译的组件与Visual Basic 6.0编译的组件相比有一点点的不同,Visual Basic.NET对象是通过垃圾收集方式释放的,所以在对象被删除到对象真正被从内存中释放之间或许会有一定的延迟。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.2 VB.net程序的基本结构程序的基本结构 7.2.
8、1 基于浏览器的应用 Visual Basic 6.0和Visual Studio 6提供了以下的技术用于建立基于浏览器的Internet和Intranet应用:Webclasses、DHTML projects、ActiveX Documents、Active Server Pages(ASP)。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net Visual Basic.NET中引入了ASP.NET。ASP.NET是增强版的ASP,并加入到了Web窗体(Web Forms)结构中。Web窗体是.NET架构中非常重要的一个组成部分。一个Web窗体包含两个部
9、分:HTML文件和源程序文件。HTML文件用于描述页面;源程序文件用于响应、控制页面事件。建立一个Web窗体与现在建立一个Visual Basic窗体一样简单。它的Wysiwyg界面设计方式同现在的Visual Basic是一样的。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 一些介绍以及结构方面的建议:(1)建议使用微软多层构架来开发自己的应用,利用ASP来开发界面,同时使用Visual Basic 6.0或者Visual C+6.0开发的COM组件。(2)包含DHTML页面及客户端DLL的DHTML 应用不能自动升级到Visual Basic.NE
10、T。建议用户在Visual Basic 6.0下开发这些应用。(3)同DHTML工程一样,ActiveX Documents不被Visual Basic.NET支持,不能自动升级。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net (4)Web类(Webclasses)在Visual Basic.NET中将不再存在,Web类应用将升级到ASP.NET,但自动升级后用户还需要做一些更改。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.2.2 用户控件 Visual Basic.NET提供了新的窗体包:Windows窗
11、体。相对于Visual Basic 6.0的窗体,Windows窗体使用不同的对象模块,不过绝大部分是兼容的。当工程升级时,Visual Basic窗体自动升级到Windows窗体。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 对于开发中间层的MTS and COM+服务器组件,Visual Basic.NET提供了更强大的支持。使用统一的调试器,可以从客户端到MTS/COM+组件再到客户端进行步进调试,同时集成调试器也支持在MTS和COM+组件内部进行调试(组件需要以native code方式编译,包含符号调试信息以及不进行优化)。Visual Ba
12、sic.NET同样也提供了新的中间层组件:Web Services(Web服 务 器)。Web服 务 器 包 含 在ASP.NET中。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.2.3 单层应用 Visual Basic 6.0支持建立以下类型的单层应用程序:单层数据库应用程序;Visual Basic插件;普通的应用程序以及游戏。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.2.4 数据库操作 Visual Basic 6.0提供了ADO、RDO和DAO三种类型的数据库访问方式,而Visual Ba
13、sic.NET包含了增强版的ADO,称之为ADO.NET。ADO.NET的目标是操作离线数据。同时对于ADO的分布应用提供了更强大的支持。ADO.NET提供了绑定数据库到Windows窗体控件和Web窗体。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.2.5 语言方面的改进 我们在很多的编程论坛或者新闻组中可以看到C+的拥护者将Visual Basic称为一个玩具语言(Toy Language)。其中,Visual Basic最被人诟病的就是它不真正支持面向对象编程(OOP)。在新的Visual Basic中,这些都将成为过去。第第7 7章章 将将
14、VB6.0VB6.0程序移植到程序移植到VB.net VB.net 而Visual Basic.NET将真正支持OOP、继承(Inheritance)、多态(Polymorphism)以及重载(Overloading)。当然,还包括一些新的数据结构、结构性的错误控制(ErrorHanding)以及线程等,这些都将被新的Visual Basic.NET所支持。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 假设我们编写了一个只包含一个函数的名称为BaseClass的基本类:Function GetCustomerName()Do some stuff En
15、d Function 如果想建立一个新类,并使用BaseClass中的GetCustomerName函数,第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 但又不想重写代码,那么就可以通过继承来这样编写新类:Inherits BaseClass Function GetCustomerID()Do some stuff End Function第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.2.6 为何还要在新版本中引进重载 所谓重载,就是建立两个具有同样名称但是参数属性不同的函数的过程。假设有GetCustom
16、ID函数,根据输入输出用户的ID号码,那么该函数可能有以下两种类型:第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net Function GetCustomerID(custname as string)As Integer 通过用户名获得用户IDEnd FunctionFunction GetCustomerID(purch as long)As Integer 根据购物单号码获得用户IDEnd Function第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 通过重载,用户就可以根据不同类型的输入调用同一个函数。实际
17、上现在的Visual Basic在某种程度上提供了重载的功能。考虑下面的函数:Function GetCustomID(vIN As Variant)As Long GetCustomID=vINEnd Function这时候,我们不妨可以试试下面两种调用方式:ID=GetCustomID(123)或者:ID=GetCustomID(123)第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.2.7 多态的概念 多态是在一个类中重新定义一个函数的过程。例如:需要建立一个基于BaseClass类的子类,但是又需要重新编写GetCustomerName函数,
18、在新版的Visual Basic中,就可以这样写:第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net Inherits BaseClassFunction GetOrders()Overrides Function GetOrders().End Function第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.2.8 错误处理(Error Handling)Visual Basic.NET的另外一个大的改进就是错误处理。Visual Basic将 提 供 try.catch.finally结 构,就 像Delphi
19、中的那样。例如:Sub SafeWrite()Try第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net Open Testfile .Write#1 Catch Kill TestfileFinally Close#1End Try End Sub第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.2.9 建立线程 新的Visual Basic语言结构部分将包含建立多线程。一个线程建立的范例如下:set t=New Thread(New Threadstart(AddressOf(BaseClass.Function1
20、)从上面的范例还可以看到,Visual Basic.NET中的AddressOf函数将真正返回函数的指针。这在进行API调用,例如回调函数方面将是很有帮助的。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.3 如何进行程序升级如何进行程序升级 如果想要将Visual Basic 6.0的程序向Visual Basic.NET程序升级,则首先还需要在自己的系统中安装Visual Basic 6.0,然后再安装Visual Basic.NET,安装好之后,直接运行Visual Basic.NET。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植
21、到VB.net VB.net 具体操作步骤如下:(1)运行Visual S主程序,启动Visual S。此时首先会出现一个如图7-3-1所示的欢迎界面。(2)在程序进入【起始页】窗口后,就可以通过如图7-3-2所示的选项来调用Visual Basic.NET语言进行开发设计了。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 图7-3-1 Visual S欢迎界面 第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 图7-3-2 调用Visual Basic.NET语言 第第7 7章章 将将VB6.0VB6.0程序移植到
22、程序移植到VB.net VB.net (3)如果需要新建项目,则直接单击【新建项目】按钮,在【新建项目】对话框中选择“Visual Basic项目”后单击【确定】按钮就可进入Visual Basic.NET编辑状态了。如果是已经用Visual Basic 6.0开发好的程序,则可以单击【打开项目】按钮,选择好要打开的项目后,将其升级就可以了。如图7-3-3所示就是正在升级的Visual Basic程序。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 图7-3-3 正在升级的Visual Basic程序 第第7 7章章 将将VB6.0VB6.0程序移植到程
23、序移植到VB.net VB.net 代码在完成升级后,Visual Basic.NET会建立一个新的升级工程,如图7-3-4所示,并且会在“任务列表”栏中列出无法在.NET中进行升级的任务。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 图7-3-4 完成升级的Visual Basic程序 第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 1Variant类型到Object类型 以前版本的Visual Basic支持Variant数据类型,该类型可以设定为除了固定程序字符串外的任何原始数据类型和Empty、Error
24、、Nothing和Null。在Visual Basic、NET中,Object数据类型可以设定为任何原始数据类型和Empty、Error、Nothing、Null和对象指针。当工程升级到Visual Basic.NET后,任何Variant定义都会改变为Object。同样,当在编辑器中插入代码时,Variant关键字也会被替换为Object。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 2Integer数据类型到Short数据类型 在Visual Basic 6.0中,16bit数称为Short。32bit数称为Integer(64bit数称为Long
25、)。当工程升级后,数据定义会做如下改动:Dim x As Integerdim y as Long 更改为:Dim x As Shortdim y as Integer第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 3属性语法 Visual Basic.NET对于自定义属性的语法做了更加直观的更改,将Get和Set合而为一。例如原来的属性如下:Property Get MyProperty()As Integer m_MyProperty=MyPropertyEnd Property Property Let MyProperty(NewValue As
26、 Integer)m_MyProperty=NewValueEnd Property 第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 升级后更改为:Property MyProperty()As Short Get m_MyProperty=MyProperty End Get Set m_MyProperty=Value End SetEnd Property第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 4.Visual Basic窗体到Windows窗体 Visual Basic.NET包含新的窗体包和Win
27、dows窗体,Windows窗体包含内含菜单编辑器,升级后的Visual Basic窗体会升级到Windows窗体。5界面 在先前的版本中,公用类界面对于用户总是隐藏的。在Visual Basic.NET中,公用类可以在代码窗口中浏览和编辑。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 6升级报告及注释 当工程升级后,升级报告会添加到用户的工程中,其中详细列出所有升级后所需要对代码做的更改。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.3.1 使用先前绑定的对象 Visual Basic 6.0和Visua
28、l Basic.NET都支持对象的延迟绑定,该方法事先定义一个变量为Object的数据类型,然后在运行时将其设定为一个类。然而,在升级过程中,当访问延迟绑定对象的缺省属性时可能会产生错误。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.3.2 缺省属性的运用 在Visual Basic 6.0中,许多对象都有缺省属性,缺省属性在代码中可以省略。例如:MsgBox Form1.Text1.Text 就可以这样编写:MsgBox Form1.Text1第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 其缺省属性在代码
29、编译时决定。同样,也可以在延迟绑定的对象中使用缺省属性,例如:Dim obj As Object Set obj=Form1.Text1 MsgBox obj第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net Dim obj As Object Set obj=Me.Text1MsgBox obj 不好的代码,使用缺省属性MsgBox Me.Text1 不好的代码,使用缺省属性use:Dim obj As ObjectSet obj=Me.Text1MsgBox obj.Text 好的代码,写出了属性MsgBox Me.Text1.Text 好的代码,写出了
30、属性第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 虽然缺省属性不被Visual Basic.NET支持,但是带参数的缺省属性是被支持的。要了解它们之间的区别,请看下面的范例:Dim rs As ADODB.Recordsetrs(CompanyName)=SomeCompanyrs!CompanyName=SomeCompany这实际上等于:Dim rs As ADODB.Recordset rs.Fields(CompanyName).Value=SomeCompanyrs.Fields!CompanyName.Value=SomeCompany第第
31、7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 对于第二种写法,Visual Basic.NET是支持的,然而第一种情况不被支持。那么正确的用法应该如下:Dim rs As ADODB.Recordset rs(CompanyName).Value=SomeCompany rs!CompanyName.Value=SomeCompany 第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.3.3 对Boolean类型数据使用AND/OR/NOT操作 And和Or关键字在Visual Basic.NET和Visual B
32、asic 6.0中的使用是不同的。在Visual Basic 6.0中,AND运算既执行逻辑AND操作也执行逐位AND操作,这取决于操作数(如果是Boolean类型,执行逻辑AND操作;如 果 是 数 字,执 行 逐 位 AND操 作)。在 Visual Basic.NET中,AND运算只执行逻辑AND操作。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 对于逐位操作,在Visual Basic.NET提供了一组操作:BitAnd、BitOr、BitNot以及BitXor。下面是演示这些差异的范例程序:Dim a As IntegerDim b As I
33、ntegerDim c As Booleana=1b=2c=a And bMsgBox(The answer is&c)第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 当上面的代码在Visual Basic 6.0下运行时,结果是False(执行逐位AND操作);然而在Visual Basic.NET下,结果是True(执行逻辑AND操作)。用户要确定自己的程序在升级后其运行结果同升级前一样。Visual Basic.NET包含了VB6.And、VB6.Or以及VB6.Not的兼容函数,这些函数执行的结果同Visual Basic 6.0下的AND/OR
34、/NOT操作的执行结果是一样的。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 当代码升级后,结果会像下面这样:Dim a As Short Dim b As ShortDim c As Booleana=1b=2c=VB6.And(a,b)MsgBox(The answer is&c)第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 升级后的代码会得出False的结果,这同在Visual Basic 6.0下运行是一样的。如果不想自己的代码升级后使用兼容函数,就需要确保自己的AND/OR/NOT都使用在Boolea
35、n类型数据的操作中。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 例如,如果上面的代码更改为下面的形式:Dim a As IntegerDim b As IntegerDim c As Booleana=1b=2c=a 0 And b 0MsgBox(The answer is&c)第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 则当升级后,代码同原来的几乎一样:Dim a As ShortDim b As ShortDim c As Booleana=1b=2c=a 0 And b 0MsgBox(The an
36、swer is&c)第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 与前面不同的是,每一个操作都是在Boolean数据之间进行的,因此它们在Visual Basic 6.0中使用的都是逻辑AND操作,所以在升级到Visual Basic.NET后不会发生改变。这样做的意义是你可以直接在Visual Basic.NET和Visual Basic 6.0之间拷贝和粘贴代码,你的代码会运行的更快,因为使用的是本地的AND操作而不是兼容函数。另外一个需要考虑的问题是,对于函数结果的AND/OR/NOT 操作的问题。如下面的范例:Dim b As Boolean
37、b=Function1()And Function2()第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 在Visual Basic 6.0中,Function1和Function2的结果都会执行,而后再将结果进行AND操作。在Visual Basic.NET中,只有当Function1的结果为True时才会计算Function2。因为Visual Basic.NET中的AND运算执行的是逻辑AND操作,如果Function1结果为False,AND结果肯定是False,为了加快速度就不再执行Function2了。第第7 7章章 将将VB6.0VB6.0程
38、序移植到程序移植到VB.net VB.net 下面的代码说明了Visual Basic 6.0和Visual Basic.NET之间的不同:Dim i As Integeri=TrueIf i=?1 Then MsgBox(True)Else MsgBox(False)End If第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 在Visual Basic 6.0中,结果为True;而在Visual Basic.NET中结果为False。如果对代码做如下改动,程序在两种语言下运行都会显示True。Dim i As Booleani=TrueIf i=Tru
39、e Then MsgBox(True)Else MsgBox(False)End If 第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 通过上面的范例可以看出,在程序中需要注意两点:(1)使用常量True和False来判断是否而不要使用0和-1。(2)使用Boolean类型变量储存Boolean数值而不要使用Integer类型变量。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.3.4 使用VB常量而不使用它们所代表的值 在写代码的时候,尽量使用VB常量而不要使用它们所代表的值。例如用户要在运行时将一个窗口最大
40、化,使用:第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net Me.WindowState=vbMaximized Good:Constant name而不要使用:Me.WindowStyle=2 Bad:Underlying value Me.WindowStyle=X Bad:Variable 第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.3.5 避免Null传播(Propagation)先前版本的Visual Basic支持Null传播。Null传播的前提是Null值使用在表达式中,表达式的结果将是Null
41、。例如下面的范例,结果V都将是Null。Dim VV=1+NullV=Null+Right$(SomeText,1)V=Right(SomeText,0)第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 在Visual Basic.NET中,下面的函数将不再返回Null值:Chr MidCommand OctCurDir RightDate RTrimEnviron SpaceError StrHex TimeLCase TrimLTrim UCase第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.3.6 窗体与
42、控件 Visual Basic.NET包含了一个新的窗体包:Windows窗体。Windows窗体与Visual Basic 6.0窗体间保持了最大的兼容性。然而,还是有一些需要提出的关键差异:Windows窗体不支持OLE container控件。需要在Visual Basic 6.0应用中避免使用该控件。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.3.7 使用以0为下界的数组 Visual Basic 6.0允许使用任何整数数字作为一个数组的上界和下界,同样也可以通过ReDim将一个Variant重新定义为数组。为了能够与.NET平台下的其他
43、语言协同工作,Visual Basic.NET数组必须以0作为下界,而且只有一个变量事先定义为数组后才可以使用ReDim函数重新定义。虽然这样限制了数组定义的灵活性,但这样可以在Visual Basic.NET和.NET下的其他语言之间传递数组。第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 下面的范例说明了新的定义数组的约束:Dim a(1 To 10)As Integer 错误:下界必须为0Dim vReDim v(10)错误,在没有定义v为数组前不能使用ReDimDim b(10)As Integer 正确ReDim b(5)As Integer
44、正确第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 7.3.8 用户自定义数据类型中的数组和固定长度字符串 为了使Visual Basic.NET数组和数据结构完全兼容Visual Studio.NET,固定长度字符串在新语言中不再被支持。在大多数情况下这不是问题,因为Visual Basic.NET提供了兼容固定长度字符串定义的类,那么代码:Dim MyFixedLengthString As String*100 升级后会变成这样:Dim MyFixedLengthString As New VB6.FixedLengthString(100)第第7
45、 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 例如:Private Type MyType MyArray(5)As IntegerMyFixedString As String*100End Type Sub Bar()Dim MyVariable As MyTypeEnd Sub 升级后会变为:Private Type MyTypeMyArray()As Integer第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net MyFixedString As StringEnd TypeSub Bar()Dim MyVari
46、able As MyType ReDim MyVariable.MyArray(5)As IntegerMyVariable.MyFixedString=String$(100,)End SubAvoid Legacy Features第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 为避免使用从原始Basic继承的特性,如下的关键字在新版本语言中将不再出现:DefComputed GoTo/GoSubGoSub/ReturnOption Base 0|1VarPtr,ObjPtr,StrPtr LSetWindows APIs第第7 7章章 将将VB6.
47、0VB6.0程序移植到程序移植到VB.net VB.net 大多数的API调用可以像在Visual Basic 6.0中一样使用,因为数据类型发生了改变。在Visual Basic 6.0中的Long类型在Visual Basic.NET中定义为Integer类型。在升级过程中这些定义会自动改变,例如:Private Declare Function GetVersion Lib kernel32()As LongFunction GetVer()Dim Ver As LongVer=GetVersion()MsgBox(System Version is&Ver)End Function第第
48、7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 改变为:Private Declare Function GetVersion Lib kernel32()As IntegerFunction GetVer()Dim Ver As IntegerVer=GetVersion()MsgBox(System Version is&Ver)End Function第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 除了数字类型的升级外,Visual Basic 6.0还支持固定长度字符串类型,该类型升级到Visual Basic
49、.NET后会定义为固定长度字符串兼容类。所以在Visual Basic 6.0代码中最好使用通用字符串定义,例如:Private Declare Function GetUserName Lib advapi32.dll Alias GetUserNameA(ByVal lpBuffer As String,ByRef nSize As Long)As Long第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net Function GetUser()Dim Ret As LongDim UserName As StringDim Buffer As Strin
50、g*25Ret=GetUserName(Buffer,25)UserName=Left$(Buffer,InStr(Buffer,Chr(0)-1)MsgBox(UserName)End Function第第7 7章章 将将VB6.0VB6.0程序移植到程序移植到VB.net VB.net 上面的代码出现了固定长度字符串,最好更改为:Dim Buffer As StringBuffer=String$(25,)升级到Visual Basic.NET后会成为下面的样子:Declare Function GetUserName Lib advapi32.dll Alias GetUserNameA