7

我有一个大型 VB6 项目,其中很多变量没有明确定义的类型,因此它们自动默认为Variant类型。手动找到所有这些是一项艰巨的任务,那么有什么方法可以自动化吗?在 VB.Net 中,可以使用“Option Strict”禁用所有变体的自动使用,但 VB6 没有该选项。

现在我添加DefByte A-Z到每个类中,这使得默认类型为“字节”而不是“变体”。这让我在运行时捕获了很多未定义的变量,只要它们被分配一个大于 255 的值。但它仍然不是完全万无一失的。

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

4

4 回答 4

5

我曾经使用Aivosto 的项目分析器来收集这样的东西。有一个演示版本可以让您很好地了解它可以做什么。

于 2012-01-19T13:19:21.657 回答
4

用 . 装饰你的模块Option Explicit

这句话应该放在您创建的每个模块的顶部。这样做时,遇到未声明的变量时会导致编译器错误。

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

Dim i

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

于 2012-01-19T13:33:51.130 回答
2

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

于 2012-01-19T13:15:54.453 回答
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用andGlobal而不是重复上述搜索,Dim这应该得到几乎所有的东西。

于 2012-01-19T18:11:19.653 回答