| VB3.0、4.0应用系统到5.0的升级 |
| Visual Basic(以下简称VB)5.0是微软公司1997年推出的完全32位可视化软件开发工具
,它具有丰富的功能和良好的性能,成为许多应用软件开发公司和人员的首选开发工具。但是对于正在使用VB4.0或VB3.0开发软件的人来讲,重要的问题不是要不要或能不能使用VB5.0,
而是怎样花费最小的代价将已经或正在开发的应用系统升级到VB5.0。 笔者所在公司有许多产品是用VB3.0和VB4.0开发的,在对这些产品的源代码升级到VB5. 0的过程中,通过不断学习和探索,我们大致掌握了升级VB5.0所涉及的内容和方法,现叙述如下,供各位软件开发者参考。 升级前需要考虑的问题 1.产品最终用户的接受能力:由于VB5.0是完全32位的,所以它和由它开发的产品只能运行在Windows 95或Windows NT上,因此在升级前必须考虑用户是否能拥有这样的运行环境。 2.确定升级涉及的范围和规模:对于比较小的应用,升级工作较简单,只需要做一些代码的改动;而对于大型的应用系统来讲,升级到VB5.0是一项系统工程,需要进行修改原设计、版本控制、配置管理、修订测试计划、编程、测试、质量保证等一系列工作。 3.掌握影响升级的风险因素:影响升级的因素有很多,主要包括有无经验、有无必须的资源、需要付出的代价、升级的进度安排、升级的可操作性、数据的一致性、版本的兼容性、软件各组成部分的相互依赖性、软件的推广程度等等。影响升级的因素越多,进行升级的困难和风险就越大。大范围和大规模的升级意味着高风险。 4.考虑第三方控件新版本的可获得性和兼容性:对于 使用的第三方控件要确定是否有 ActiveX版本或可以替代的其他产品,并且要详细了解新版本和旧版本之间的兼容性。 升级涉及的方面 1.API声明及调用 这是必须进行的改动。对所有16位的API声明和调用代码,必须逐个升级到32位。虽然可以使用后面叙述的升级工具将应用程序中的API调用声明自动修改,但A PI的升级仍然应注意如下的问题: ①VB5提供的升级工具功能有限,某些API声明不能进行自动转换、如库位置改变,SUB变成FUNCTION等。对不能转换的API声明,升级工具只增加注释,如SetWindowPos,在16位版本中是Sub而在32位版本中是Function。 ②32位API中有些函数的参数位置顺序发生改变,因此必须调整应用程序中调用API函数的语句中的参数位置,如WindowFromPoint的两个参数的顺序就和16位API正好相反。 ③许多32位API的参数和返回值的数据类型发生改变,如用Long替换了16位API中的Inte ger,因此在应用程序中调用API函数的语句中的参数数据类型和接收返回值的变量数据类型必须修改。如GetCursorPos返回一个POINTAPI结构变量,其中的X和Y必须是Long,因此在程序的变量声明中,应将POINTAPI结构中X和Y的声明修改为Long。 ④某些16位中的API函数在32位中没有,因此必须另找函数替代,程序中调用这些函数的代码也需相应调整,如GetFreeSystemResources函数。 2.控件 VB5.0中许多基本的控件已经具有了以前第三方控件才有的功能;有些控件微软已经终止使用;某些第三方控件无ActiveX升级控件或升级后兼容性不好,等等。所有这些都将导致升级中控件的升级和相应代码的修改。 对于应用程序中使用的第三方控件,其升级应该注意以下问题: ①对于升级的控件需先注册。 ②升级时要注意新旧控件的兼容性,对涉及该控件的所有部分要进行彻底测试。比如So ftware FX Inc公司提供的Chart FX,升级后控件的对象名称改变了,因此程序中的每一个实例必须重新生成,并且要设置其属性与以前一致;升级后控件的属性和方法有增加,也有修改 (如CloseData属性改成了只读,OpenData方法参数增加了两个等),因此程序中涉及这些属性和方法的代码也必须作相应调整或修改。 3.DAO对象 DAO2.0或DAO2.5中有些对象在DAO3.5中并不支持(如:Table对象),所 以需调整这部分对象的使用。 4.编程风格 用Public替代Global,用VB5.0提供的内建常数名称替代数值,如CheckBox .Value=vbChecked,等等。这样可增加程序的可读性和可维护性,并能减小执行文件的长度和保证命名的前后一致性。 5.数据类型 VB4.0和VB5.0新增加了Object、Byte、Variant Decimal等数据类型,使用这些数据类型可增加程序的可读性和可维护性。另外,自定义过程和函数中可缺省参数的数据类型也可以不是Variant,从而可以减少执行文件的长度。 6.效率和优化 使用类模块、窗口对象、封装等,减少公共变量和过程;使用For...Eac h和With...End With等语句结构,增强代码执行效率;使用新提供内嵌函数代替自定义函数, 如用窗口的StartUpPosition属性替换窗口居中自定义函数等等。所有这些改动,都将使执行文件减小长度,并提高速度。 7.条件编译 VB5.0是完全32位的,因此原程序中的所有涉及字长的条件编译代码都失去了存在的必要,应全部删除。 8.INI文件内容的重新注册 如果系统使用了GetSetting等函数对INI文件进行读取或设置,升级时必须重新注册INI文件到WIN95的注册表中,否则程序中的GetSetting函数将返回空字符串。 注册方法有两种。第一,在VB环境下使用SaveSetting语句将INI文件的内容重新注册;第二,使用注册表编辑器(执行WIN95目录下的regedit.exe),在HKEY—CURRENT—USER\SoftWar e\VB and VBA Program Settings下新建与INI文件名相同的应用主键,然后将INI文件中的内容登记到其下。 9.某些语句在特定情况下执行效果不同 应对升级后的程序进行详细测试,下面以单击 Forml窗口调用显示Form2窗口为例说明。 窗口Forml的事件为:Click Deactivate代码为: Form2.Show 1U nload MeVB4下执行效果:Form2显示,Form1消失,程序继续运行。 VB5.0下执行效果:Form2显示后消失,Form1消失,程序中断运行。 可见执行效果不同。 10.字符串函数的使用 由于升级后使用32位字长,因此可能需要更正有些涉及字符串的函数,包括len和lenb、instr和instrb、left和leftb、right和rightb、mid和midb、asc和 ascb、chr和chrb。 使用升级工具Migrate Wizard 在VB5.0的CD盘上,有一个实用工具可以帮助、引导用户进行从VB3或VB4升级到VB5的工作,其存放目录为:\Tools\Unsupport\Migrwiz。注意,执行前需要将其数据库文件Upwizard .mdb的只读属性去掉。 该升级工具可以在不同的目录中重新生成应用系统,并自动完成以下工作: 1.在其中的API和ODBC API声明和调用语句之前增加应改动内容的注释或直接将其替换为32位API声明和调用。 2.在第三方的DLLs(如DAO、RDO)声明和调用语句之前增加应改动内容的注释。 3.在潜在的可以进行性能优化的区域,增加可以进行优化内容的注释。 4.产生一份修改报告,包括总体情况报告和明细报告。 升级工具增加的注释以TODO开头,其后是说明应该做什么。 利用该升级向导,不仅可以将API的升级自动执行,而且可以学习在升级过程中应改动的内容,这对升级经验的积累和加快升级速度都有帮助。 |