创建 VB 插件






4.29/5 (7投票s)
2001年11月5日
7分钟阅读

135228

1645
本文展示了如何创建 VB 插件,并解释了可扩展性对象模型 (EOM)。
引言
为什么要创建插件?我们程序员在操作 Microsoft 工具时,总是觉得缺少一些功能,似乎 Microsoft 还没有开发出我们需要的工具。事实上,Microsoft 在其每个版本的开发工具中都做了大量出色的工作来添加新功能。显然,Microsoft 无法设计出满足全球每个程序员需求的特性,因此 Microsoft 使 Visual Basic 成为一个可扩展的产品,从而为 VB 开发者提供了在 VB 中创建自己特性的途径。
什么是 EOM?
EOM 代表可扩展性对象模型。您可能会问,什么是可扩展性?可扩展性是指扩展、延伸不同开发工具功能的能力,特别是 Microsoft 集成开发环境 (IDE)。IDE 为您提供了一个称为可扩展性对象模型的编程接口,这是一组用于自定义环境的强大接口。它允许您挂接到 IDE 来创建称为插件的扩展。一个好的系统应该是可以在不损害系统主要功能的情况下进行扩展的。
为了实现可扩展性功能,VB 提供了强大的可扩展性对象模型。通过 EOM,VB 本身的许多核心对象都可以免费提供给您。EOM 并不容易学习,本文仅提供插件创建的基础知识,您需要自己深入这个广阔的领域来探索使用 EOM 可以实现的奇迹。
EOM 由六个松耦合的对象包组成,这些对象包及其方法实现了 VB 开发模型中的关键服务。它们是:
- 核心对象
- 窗体操作
- 事件响应
- 插件管理
- 项目和组件操作
- 代码操作
核心对象
此包是创建插件使用的主要包。它包含以下对象:
- 根对象
IDTExtensibility
接口对象- Visual Basic 实例变量
根对象
VBE 是 Visual Basic 中的根对象。VBE 对象是 Visual Basic 中每个可扩展性对象和集合的基础对象。每个对象和集合都拥有对 VBE 属性的引用。VBE 对象拥有的集合包括以下内容:
VBProjects
Windows
CodePanes
CommandBars
VBProjects 集合
此集合使您能够访问一组 VB 属性。如果您的开发环境有既定的软件开发流程,此功能可能很有用。此集合的一些关键属性和方法是:
Filename
:返回项目组文件的完整路径名。Startproject
:返回或设置当用户从“运行”菜单中选择“开始”菜单、单击“运行”按钮或按 F5 键时将启动的项目。AddFromFile
:这是一个方法,允许用户添加或打开项目或组对象。它唯一必需的参数是表示要添加的文件路径的字符串。AddFromTemplate
:此方法允许您将项目模板添加到VBProjects
集合中。它唯一必需的参数是表示要用作模板的文件的路径的字符串。
Windows 集合
使用 Windows
集合,您可以访问项目和属性窗口等窗口。此集合使您能够访问所有当前打开的代码窗口和设计器窗口的组。
IDTExtensibility 接口对象
IDTExtensibility
接口对象公开了可扩展性模型的公共方法和属性。我所说的“公开”是指,由于您不直接使用底层可扩展性模型的服务、方法和属性,因此您需要调用该模型代理的方法,可以说是这样。您可以将接口视为可扩展性模型对象(您实例化)的私有实现的公共代理。
Visual Basic 实例变量
也称为动态标识变量。它标识您 VB 会话的特定实例。此实例标识符使您能够在内存中拥有单独标识的 VB 运行实例。
实例变量的类型为 VBIDE.VBE
。要使用此变量,请在类模块或通用模块中声明它。
有关这些包的完整详细信息,请参阅 Microsoft 网站。请理解,我无法在此简短的文章中解释这些包的每个细节。让我们开始创建插件。
我们将构建一个简单的插件,用于计算给定程序组件的代码行数。
要开始创建插件,请启动新项目。选择 AddIn 项目类型。AddIn 项目类型包含创建 VB 插件所需的许多组件。有一个窗体,您可以对其进行修改,为您的插件提供用户界面。还有一个设计器模块,其中包含插件与 VB 接口所需的四个方法。
删除窗体上的 “确定” 和 “取消” 按钮,并将以下控件添加到窗体中:
控件类型 | 属性值 |
窗体名称 |
FrmAddIn |
标题代码 |
行计数器 |
标签名称 |
LblProject |
标题 |
项目 |
文本框名称 |
TxtProject |
标签名称 |
LblComponent |
标题 |
组件 (Component) |
文本框名称 |
TxtComponent |
命令按钮名称 |
CmdCountCodeLines |
标题 |
计算代码行 |
命令按钮名称 |
CmdDone |
标题 |
完成 |
标签名称 |
LblCodeLines |
标题代码 |
Lines |
文本框名称 |
TxtCodeLines |
这是完整的代码
Public VBInstance As VBIDE.VBE
Public Connect As Connect
Option Explicit
Private Sub cmdCountCodeLines_Click()
Dim strVBProject As String
Dim strVBComponent As String
Dim objVBComponent As VBComponent
'Forms controls
strVBProject = txtProject.Text
strVBComponent = txtComponent.Text
'Set objVBComponent to the program component suggested by
'strVBProject and strVBComponent
Set objVBComponent = _
VBInstance.VBProjects.Item(strVBProject).VBComponents.Item(strVBComponent)
'Assign the number of lines of code (countoflines) of the component
'objVBComponent to the txtcodelines textbox
txtCodeLines.Text = Str(objVBComponent.CodeModule.CountOfLines)
End Sub
Private Sub cmdDone_Click()
'Hide the addin window
Connect.Hide
End Sub
让我们看看代码,当用户单击 “计算代码行” 按钮时,会触发 cmdCountCodeLines_click()
。它使用用户输入到窗体文本框控件中的项目和组件名称,将该组件分配给 objVBComponent
对象。请注意在下一行代码中获取组件项所使用的层次结构:
Set objVBComponent = _
VBInstance.VBProjects.Item(strVBProject).VBComponents.Item(strVBComponent)
首先,引用 VBInstance
对象,然后引用其 VBProjects
集合,通过使用 strVBComponent
字符串作为集合的 Item
方法的键参数来访问该项目的 VBComponents
集合。这个冗长的引用序列最终将指定项目(strVBProject
)的指定组件分配给 objVBComponent
对象。
下面的代码行:
txtCodeLines.Text = Str(objVBComponent.CodeModule.CountOfLines)
用于访问新分配的 objVBComponent
对象的 CodeModule
。CodeModule
对象中的 countoflines
属性包含该特定组件中的代码行数。此数字被分配给 txtCodeLines
文本框,以便用户可以看到结果。
添加的第二个事件过程是 cmdDone_click()
事件。它只包含一行代码,调用 Connect
对象的 Hide
方法,隐藏插件的用户界面。Connect
对象是 Connect
类的实例,正如您可能记得的那样,它是 AddIn 项目的一部分。它在窗体的“通用声明”部分定义。
在 Connect Designer 的 AddInInstance_OnConnection
过程中,有一行代码如下所示:
Set mcbMenuCommandBar = AddToAddInCommandBar(“My AddIn”)
将 “My AddIn” 更改为 “Code Line Counter”。
保存项目,然后通过从菜单中选择 “文件” | “生成 CodeLineCounter.dll” 来编译插件。当出现“生成项目”对话框时,请确保将可执行文件放在与 VB 相同的目录中。您希望 VB 以后能够访问该插件。
在使用插件之前,您必须对 VBADDIN.INI 文件进行更改,以便 VB 知道插件可用。您可以在 Windows 目录中找到此文件。在文件的末尾添加以下行:
CodeLineCounter.Connect=0
保存文件;然后返回 VB。打开您手头上的任何项目。然后从菜单中选择 “插件” | “插件管理器”。您应该会看到一个插件列表。选择 codelinecounter,然后选择 “启动时加载” 以及 “已加载”/“未加载” 复选框,然后单击 “确定”。
通过从菜单中选择插件来调用它,它的用户界面就会显示在屏幕上。输入当前打开的项目名称,然后输入组件名称。例如,打开的项目名称是 project1.vbp,在项目文本框中输入 project1,窗体名称是 form1.frm,在组件文本框中输入 form1,然后单击 “计算代码行” 按钮,您将在 “代码行” 文本框中看到代码行数。