VB6:禁用变体

问题描述 投票:0回答:4

我有一个大型 VB6 项目,其中很多变量没有显式定义的类型,因此它们自动默认为

Variant
类型。手动查找所有这些是一项艰巨的任务,那么有什么方法可以自动化执行此操作呢?在 VB.Net 中,可以使用“Option Strict”禁用所有自动使用变体,但 VB6 没有该选项。

现在我向每个类添加了

DefByte A-Z
,这使得默认类型为“Byte”而不是“Variant”。这让我可以在运行时捕获大量未定义的变量,只要它们被分配的值大于 255。但这仍然不是完全万无一失的。

有没有更可靠的方法来检测所有未定义的变量?

variables vb6 variant strict
4个回答
5
投票

我曾经使用Aivosto 的项目分析器来获取类似的东西。有一个演示版本,可以让您很好地了解它的功能。


4
投票

Option Explicit
装饰你的模块。

此短语应位于您创建的每个模块的顶部。这样做时,遇到未声明的变量时会导致编译器错误。

但是,

Option Explicit
不会阻止无类型变量声明,例如

Dim i

变量

i
将被声明为变体,即使定义了
Option Explicit
也不会引发编译器错误。


2
投票

我认为没有一种“万无一失”的方法来检测所有未定义的变量。但是,Option Explicit 语句将要求所有变量都在该语句出现的模块中声明,因此编译器将标记任何不是这种情况的实例。还有一个 IDE 选项会自动将此语句添加到任何新模块的开头。


2
投票

使用程序员的文本编辑器(我使用 UltraEdit)并在项目源目录中进行大量搜索。

从搜索

Variant
开始(显然),尽管您可能已经这样做了。

接下来使用正则表达式类型搜索以下内容:

 *Dim [a-zA-Z][a-zA-Z0-9_]*\p

这应该得到

Dim x
场景,没有尾随
As DataType

使用

*Dim [a-zA-Z][a-zA-Z0-9_]*,.*
查找
Dim a, b, c As Integer
类型的场景。

使用

*Dim .*, [a-zA-Z][a-zA-Z0-9_]*,.*
来处理奇怪的球场景,例如
Dim a As Integer, b, c As Long

使用

Private
Global
(而不是
Dim
)重复上述搜索,这样就可以得到几乎所有内容。

© www.soinside.com 2019 - 2024. All rights reserved.