2024年4月25日发(作者:)

维普资讯

34・ 

Computer Era No.8 2002 

Visual Basic 6.0与Visual Basic.N ET的不兼容处理 

万春’。刘丽莉 

(1.集美大学网络中心;2.集美大学计算机与通信工程系,福建厦门361021) 

摘 要:本文介绍了VB6、0和VB、NET多方面的不兼容,给出了如何将VB6源代码转变为VB.ET平台下可运行程序 N

的几个常用技巧。 

关键词:VB,ET;C;不兼容 N

VB,ET是基于,NET框架的VB6的换代产品,NVB.NET继 

’myfixed被设置为固定长度的字符串 

承了VB的易用性,可以用可视化的方法快速开发Web应用程 

序、XNIL Web服务、Windows应用程序以及其它服务器端构 

件,是绝大多数程序员首选的程序设计语言。但VB,ET省略了 N

许多VB6使用的语法,这就意味着用VB6的源程序并不能直 

2有关窗体加载 

在VB6中,如果想加载已经创建与工程中的某个窗体,则 

用如下语句: 

frmCustomer.Show 

接在VB.ET运行。因此,N将VB6工程迁移到VB.ET就必须 N

重写代码。虽然VB,ET提供了一个迁移工具,N但有些特殊隋况 

必须要求手工重写代码。下述是代码迁移过程中的一些技巧。 

另外一种VB6的情况如下: 

dim frmNewCustomet As Form 

set frmNewCustomer As New frmCustomer 

frmNewCustomer.Show 

1固定长度的字符串的声明 

固定长度的字符串不是VB.NET的基本类型,但VB.ET N

系统编译器内部支持。因此,对在VB6中声明的此种类型的变 

量需要改变声明方式。如: 

在VB6声明如下:Dim mynxedchar As String 8 

在VB.NET中,后一种情况能够很好地工作,但前一种情况 

会出错。原因是VB.NET的Form实际上是WinForms类的派生 

类。 

3有关类实例的创建 

有两种方法声明一个对象。第一种方式如下: 

Dim objSomeObject As MyClass 

Set objSomeO bjecl=New MyClass 

VB ET要改为:NDim myfixedchar As VB6,FixedLength- 

String(8) 

但这种改变存在一个大问题:如果要转变的是VB6的用户 

自定义类型(UDT),在VB.ET只能采用结构类型(StNruc— 

ture)。如果VB6的用户自定义类型中包含固定长度的字符串, 

由于VB.ET只能包含则这种转换基本类型,N于是UDT就无法 

完全转换为Strucmre类型。如下例: 

这种方法最常用,第二条语句一执行,则类MyClass的实例 

objSomeObject即被创建。这第一种方法在VB,ET仍然可以 N

使用,不过第二条语句的“Set”要去掉。 

VB6的第二种方法如下: 

Dim objSomeObjecl As New MyClass 

VB6有如下用户自定义类型: 

Type onerecord 

ID As Integer 

objSomeObjec1.SomeProperty=”A stdng value” 

。给该对象的某个属性赋值 

。固定长度的字符串 myfixed As String 30

S协tus As Boolean 

End mype 

对VB6,在这种情况下,第一条语句并没有创建类实例,只 

有当该对象的某个属性第一次被引用时,该类实例才被立即创 

建。但在Ⅷ.NET情况就不同了,当第一条语句一执行,该类实 

VB.ET中只能转换为:N 

Structure onerecord 

Public ID As Integer 

例即被创建。对这种变化,VB6源代码迁移到VB.ET时好像也 N

没什么影响,因为第二条语句无非表示第一次引用该对象的某 

个属性。但如果在VB6的程序中第一条语句之后有其它语句, 

而这些语句假设类的实例还未创建的前提下实现某些功能,则 

这种迁移肯定会有问题。 

Public myflxed As String。非固定长度的字符串 

Public Status As Boolean 

End Structure 

如果在结构类型中必须要求myfix ̄l变量是固定长度的, 

那就必须手工重写代码。如下: 

Dim myrecord As onerecord 

4有关条件判断 

注意如下语句: 

If a>b And C Then… 

mymco ̄.myifxed=SpaceS(201 

myRecord.myfixed=”Some description” 

这个语句在VB6和VB.ET的执行有微小的差别,在VB6 N

不管“a>b”为真或假,C都要执行。但是VB.ET处理这一问题 N

的方式是:如果“a>b”为假,则C就(-r转弟42页) 

myRecord.myfixed.PadRight(201 

维普资讯

42. Computer Era No.8 2002 

●路由器:CISCO2501 

3)网站信息员,其职责是负责Web页面的设计更新,将公 

●防火墙:CISCO PIX t520 

司各对外发布信息及时上网,负责处理Webmaster邮件,机房日 

●交换机:CISCO CATALYST 3524 

常管理值班等。 

●中心交换机:CISCO CATALYST 6509 

5门户网站应用状况 

●信息服务器:mM Netifnity 5000 

公司门户网站的建设主要是为公司的生产经营服务,不是 

●代理服务器:mM RS600 44P Model 170 

以赢利为目的,不能产生直接经济效益,因此系统的运行费用由 

●数据服务器:mM RS600 H80 

公司按计划拨给设备维护费和通讯使用费。 

4)系统软件 

目前公司建设了1000MB光纤主干网,公司30多个二级单 

●信息服务器操作系统:Windows 2000 Server 

位都可通过公司网站的代理服务器使用互联网,可以收发电子 

●代理服务器操作系统:AIX Version 4.3 

邮件,电子邮件的命名可利用公司的域名(XXXX uhua.corn. 

●管理服务软件:Netscape Proxy Server 3.5 

cn),充分地利用公司的域名资源宣传企业。目前注册用户500 

●E-mail管理系统:Lotus Domino 5.04 FOR AIX 

多个,已满足了公司公务上网的需求。 

●数据服务器操作系统:AIX Version 4.3 

正在规划和开发中的公司电子商务平台也充分利用公司的 

●数据库管理系统:Oracle 8i for AIX 

门户网站。在公司的网站发布招标信息、商务信息、对外合作技 

4网站运行及维护 

术开发和难题征解等,例如公司生产的颗粒石灰氮产品信息在 

企业网站建成后,主要任务是站点安全管理、日志管理、信 

网站上发布后,引来了日本、台湾、韩国等客户,取得了良好的经 

息维护、技术服务、用户管理、信息管理和信息录入。主要在以下 

济效益,集团技术中心的科研人员上网检索和查询到大量的新 

几个方面做好工作。 

产品新技术开发信息,有力地促进了科研开发。 

1)网站主管,其职责是负责站点的技术管理、安全管理,负 随着公司信息化建设的发展,利用企业的门户网站建立电 

责公司域名的管理,公司网站主管是由计算机中心副主任兼任。 

子集市,开展协同商务,可以提高公司的管理水平和企业竞争 

2)网站管理员,其职责是系统维护、日志管理、用户管理及 

力。 园 

技术服务,安排2名技术人员。 

客套客套客 客 客套客套客套客 客 客套客套客套客 客 客客客套客套客套 客 客套客套客套客 客客客套客套客 套客套客 客 客套盍客客客 套套 

(上接第34页) 不再执行。这里, 代表返回逻辑值的表达 

Me.WindowState=vbNormal 

式或函数。这种处理方式类似C语言的处理方式(而不是传统 

MsgBox”Error ̄”.vbCdtical 

的BASIC语言)。事实上,VB.NET的许多语法与传统的BASIC 

bRecordLoaded=True 

语言差别很大,反而与C语言越来越接近。 

在VB6中,以上这些代码等价于如下代码: 

在VB6到VB.ENT源代码迁移时,如果C是一个函数,最 

Me.WindowState:0 

好是将if后的条件分开写。 

MsgBox’’Error[”.1 6 

bRecordLoaded=一1 

5有关数据库控件的绑定 

当使用VB.ENT的代码迁移工具转换VB6代码时,该工具 

VB.ENT只支持ActiveX Data Objects(ADO),不再支持 

并不修改任何常量。但是,在VB.ENT中的常量虽然与VB6中 

Data Access Objcets(DAO)和Remote Data Objcets(RDO)。因 

的名称相同,而值却不一样了。例如:常量VB6中的True是一1, 

此,如果VB6源代码中有DAO和RDO的有关操作,就要先将 

而在VB.ENT中却是+1。这样可能与VB6中程序的原义不一 

DAO和RDO用ADO替换。 

样了。 

6已经作废的传统BASIC的一些语句 

8不能用DHTML页和Web类 

VB是从QuickBAS1C发展而来,因此有大量的传统BASIC 

微软提供的迁移工具不能处理DHTML页,在VB.ENT中 

语句一直保持到VB6,实际上这些语句已经很少有人使用,VB. 

是用Web Form来代替DHTML页。转换DHTML页需要手工 

ENT不再支持这些作废的语句,例如: Gosub、On X GoTo… 

去处理。由于两者在许多方面差异太大,比较有效的方式是用 

(Computed GoTos)、Let(这里指类似:Let i=i+1)、VarPtr、 

VB.ENT的Web Form重写,当然可以将原DHTML页的程序 

o ̄jPtr、StrPtr DefBool、DefByte Deflnt、DefLng DefCur DefS— 

逻辑拷贝到新代码中。 

ng、DefDbl、DefDec DefDate、DefStr、DefObj、and DeWar等 

如果在VB6中使用了以上这些语句,则必需先删除,然后 

9类的继承和相关操作 

才能转换到VB.ENT。 

VB.ENT支持继承和与此相关的所有操作,例如覆盖、构造 

器等等。但VB6中对面向对象支持的并不好,在VB6中我们只 

7内置的常量 

能用继承仿真技术,这些技术性能不是很好。因此,如果将VB6 

在用VB编程时,如果经常使用一些内置的常量,则是一种 

的源程序转换到VB.ENT,最好能用VB.ENT重新写有关对象 

良好的编程习惯。如下例: 

操作的程序,这样可以获得最佳效果。 圈