6

我如何在自己的页面上对每个子或函数进行编目、索引和/或打印 VB6 源代码..?如果可能的话,我想使用免费或包含的 Visual Studio 加载项来做到这一点,但我并不反对自己编写一些东西。我熟悉“Microsoft Office Visual Basic for Applications Extensibility”,似乎 VB6 有一个类似的模块,这可以让我通过代码模块集合简单地“For Each”,然后将 subs 扔到打印机上时间。可能需要 10-15 行代码。

我的首要任务是打印,最好是每个子/功能都在自己的页面上,但是使用 IDE 的正常打印功能,所有代码在一个长打印输出中一起运行。接下来,我想为每个 VBP 中的每个子、函数、变量和常量的名称创建一个索引/目录。我们有 Visual Studio 6.0 企业版,但它似乎没有任何东西可以做这些事情。

你可能会笑着问:“为什么是 VB6..??哈哈!!”。这是因为我的任务是升级和更改运行工厂的大型软件系统的 VB6 源代码。它在一个孤立的网络上,与外界没有任何联系,并且已经运行了 14 年,但现在他们想开始升级一些东西。该系统由许多VBP文件组成,每个文件都有许多模块和表格。

编辑:我确实尝试过用谷歌搜索来寻找答案,但事实证明这是不可能的。我得到的只是关于从用 VB6 编写的应用程序打印的编码示例,而不是从 IDE 打印源代码。

4

4 回答 4

2

您无需正确解析代码即可满足您的要求。自己写点东西。您可以输出到打印机或 HTML 文件。我这样做过一次,效果很好。

源代码文件只是文本文件。逐行读取文件,打印每一行。每次看到“end sub”或“end function”或“end property”时都会启动一个新页面。这样每个方法都将在单独的页面上开始。FRM 文件在顶部有控制定义,您可以通过查找仅包含“end”的行来跳过它。代码从那里开始。

如果您正在做很多 VB6,我还建议您在MZ Tools中添加出色的插件。它具有出色的搜索工具。不幸的是不再免费,但物有所值恕我直言。我与供应商没有联系。

于 2016-12-09T22:07:51.567 回答
1

相信,解析模块的过程和功能是很困难的。特别是像这样的行延续:

 _
Public _
Sub _
Foo() ' _
End Sub
 _
End _
 _ 
Sub _

此外,属性可以以 结尾End Property,也可以以End Functionor结尾End Sub

幸运的是,与 VBIDE 的 VBA 版本相比,用于 VB6 的 VBIDE 具有更多用于处理 VB 项目的类和方法。

其中之一是CodePane.Members返回模块中所有标识符的集合的属性(尽管我认为它省略了Type标识符Enum,但无论如何它们都在模块的声明部分中声明)。

在此处输入图像描述

每个成员都公开了各种属性,包括它在模块中的位置: 在此处输入图像描述

如果您对更详细的解析以及 IDE 的功能齐全的插件感兴趣,您应该查看GitHub 上Rubberduck-VBA(我是贡献者)。它目前正在使用 VBA 主机,但 VB6 正在开发中。它拥有最强大的 VB 解析器之一,并且是开源的。

于 2016-12-29T01:38:54.700 回答
1

编写加载项。这比你想象的要容易得多。

获取 Steven Roman 所著的“开发 Visual Basic 插件”一书(O'Really,1999,ISBN 1-56592-527-0)。

于 2016-12-08T07:39:56.680 回答
0

您可以考虑使用软件代码搜索工具来索引语言元素,以便快速查找和检索。这将使您更容易找到感兴趣的代码,甚至避免打印所有纸张,因为您只需查找代码即可。

我们的源代码搜索引擎了解许多语言的词汇元素,特别是包括 VB6。它读取源代码库(数千个文件)并构建索引以帮助其快速查找代码元素。使用它的 GUI,您可以根据语言元素编写查询以查找代码片段,例如:

     S=*Login*

(仅)查找包含文本“登录”的字符串(使用简单的通配符),或

     'SUB' I=/[Aa]ccount.*/

它将查找名称以“account”开头的所有子例程,无论首字母大写如何(完整的正则表达式)或

       'IF'  ... N>17<35

查找使用 17 到 35 之间的任何值的 IF 语句(“..”表示“接近”)。N 查询元素可让您快速轻松地找到任何使用常量。

查询语言的一个真正强大的属性是“而不是”。这允许您构建一个查找“太多”的草率查询,然后消除“太多”部分:

       I '+' I  - I=xyz

找到两个不包括变量 xyz 的添加变量。

您可以单击任何命中列表,代码文本会出现在 GUI 窗口中。不需要纸。

因为它知道每种语言的词法结构,所以它不会被空格、换行符、注释甚至包含文本等代码的字符串所迷惑。

于 2016-12-08T10:27:43.857 回答