Help and Support

文章编号: 141932 - 最后修改: 2004年6月29日 - 修订: 2.1

如何创建基本外接程序使用 Visual Basic 4.0

本页

展开全部 | 关闭全部

概要

本文介绍如何创建基本框架工作 Visual Basic 4.0 的加载项。

更多信息

创建最小的加载项

其至少一个 Visual Basic 加载项是 ConnectAddin 和 DisconnectAddin 方法中提供的对象的 OLE 自动化服务器。 可以创建 OLE 自动化服务器的任何语言,可以编写服务器。

本文中介绍创建最小加载项使用 Visual Basic 4.0 步骤。 然后,本文会介绍如何使加载项的大部分需要一些基本增强功能。
  1. 启动项目:

    在创建最小的加载项在第一步是启动一个新的项目。 最小的加载项不需要默认窗体 ; 因此,从项目中删除窗体。
  2. 创建 Sub Main 执行下列操作:

    最小的加载项需要起始点。 因此,将新的标准 (.BAS) 模块添加到项目中。 然后,将一个空的 Sub Main 过程添加到模块:
       Sub Main()
    
       End Sub
    					
  3. 创建一个类:

    加载项的核心是公共可创建 OLE 自动化对象。 以下是用于创建此对象的步骤:
    1. 将新的类 (.cls) 模块添加到项目中。
    2. 新的类上设置以下属性:
            Property                Value
            --------------------------------------------------------------
            Instancing              2 - Creatable MultiUse
            Name                    MinimalAddIn
            Public                  True
        
      						
  4. 公开 ConnectAddIn 和 DisconnectAddIn 方法:

    在自动化管理器加载外接时, 它将查找并调用 ConnectAddin 方法。 加载项管理器将应用程序对象的实例传递到 ConnectAddin 方法。 加载项,然后可以对自动运行 Visual Basic 设计环境使用此对象。 在最少加载中,显示在此方法使用下面的代码类的消息:
       Public Sub ConnectAddIn(VBInstance As Object)
          MsgBox "ConnectAddIn"
       End Sub
    						

    同样外接程序, 管理器查找,并调用 DisconnectAddIn 方法,当卸载加载项。 在最少加载中,可显示在此方法使用下面的代码类的消息:
       Public Sub DisconnectAddIn()
          MsgBox "DisconnectAddIn"
       End Sub
    					
  5. 设置项目选项:

    到目前为止您已添加所需的最小的加载项的所有代码。 但是,您需要设置项目选项以公开此项目作为 OLE 自动化服务器。 在工具 / 选项对话框中设置以下:
       Option                  Value
       -----------------------------------------------------------
       Start up Form           Sub Main
       Project Name            Example
       Start Mode              OLE Server
       Error Trapping          Break in Class Module
    					
  6. 使外接程序可用加载项管理器:

    现在,您需要让最小的加载项加载项管理器。 根据是否运行运行 Visual Basic 的 16 位或 32 位版本的 Add Ins16 或加载 Ins32 部分下的 vb.ini 中,查找加载项。 加载项管理器查找可用加载形式的 ProgID = 的 n,其中 ProgID 是在 OLE 自动化 ProgID 为类,n 是 0 或 1。 0 意味着加载项是可用,但是 Visual Basic 没有加载它。 1 意味着在加载项是或应加载。 最小外单元在 32 位 VisualBasic 您需要将以下添加到该 vb.ini:
       [Add-Ins32]
       Example.MinimalAddIn=0
    					
  7. 测试外接程序:

    这就是它的最小的加载项。 现在可以测试它。 请继续执行并运行该项目启动加载项。 若要进行测试时必须启动的 Visual Basic 的第二个实例。 在第二个的实例中打开加载项管理器对话框。 应该有 ProgID example.MinimalAddin 旁边的复选框。 选中此框,然后单击确定。 加载项管理器将调用 ConnectAddin 方法最少的外接,并加载项将显示在消息框"ConnectAddIn"。

    现在返回到第二个实例的 Visual Basic 中,加载项管理器。 清除 example.MinimalAddin,然后单击确定。 加载项管理器将调用 DisconnectAddIn 方法,并加载项将显示在消息框"DisconnectAddIn"。

展开最小的加载项

最小的外接演示了用于创建外接绝对的最低要求。 但是,有大多数加载项需要执行一些基本方法。 此部分中将会扩展时创建一个基本外接自动将自己添加到 vb.ini 和添加到 Visual Basic 加载项菜单的菜单最小的加载项。
  1. 引用 VBIDE:

    最小的加载项中未使用 Visual Basic IDE 外接对象模型。 任何加载项需要程序在 IDE 的则必须添加对"Microsoft Visual Basic 4.0 的开发环境"对象库的引用。 几乎所有加载项需要添加到此库的引用。 基本外接程序,我们需要使用库声明变量并添加一个菜单。 在工具 / 引用对话框,因此,添加对此库的引用。
  2. 更改类名称:

    为帮助区分从最小的加载项的基本外接,请更改以 BasicAddIn 的类模块的 Name 属性。
  3. 存储应用程序对象的实例:

    大多数的加载项需要存储传递中通过 ConnectAddIn 方法,以便可以将自动在 IDE 更高版本使用 Application 对象的实例。 对于基本外接程序,这意味着您需要声明类存储在实例中的对象。 为此,您需要将以下添加到类的通用声明部分:
       Private ThisInstance As VBIDE.Application
    						

    在调用 ConnectAddIn 方法时, ThisInstance 变量需要设置到实例中传递。 为此,将 ConnectAddIn 方法改为以下:
       Public Sub ConnectAddIn(VBInstance As Object)
          Set ThisInstance = VBInstance
       End Sub
    					
  4. 添加和移除一个 MenuLine:

    加载项的大部分还需要将一个菜单项添加到加载项菜单中,以便用户可以触发某些功能在其加载。 在基本外接程序,只显示一条消息如果用户单击该菜单项。 添加代码以创建菜单之前, 需要将两个变量添加到类的通用声明部分:
       Private AddInMenuLine As VBIDE.MenuLine
       Private hMenuLine As Long
    						

    AddInMenuLine 对象用于存储到新建菜单的引用,该 hMenuLine 用于存储稍后将讨论的句柄。

    现在可以添加所需向 ConnectAddIn 方法添加该 MenuLine 的代码:
       Set AddInMenuLine = ThisInstance.AddInMenu.MenuItems.Add("Basic Add-In")
    						

    这将添加到加载项菜单标题为"基本外接程序"的一个 MenuLine,并设置对该对象的引用。

    添加在 MenuLine 后需要在 MenuLine 接到事件处理程序。 在本例 MenuLine 对象的 AfterClick 事件是要处理。 首先您需要的类中 AfterClick 创建事件处理程序。 在 AfterClick 事件处理程序应如下所示:
       Public Sub AfterClick()
          MsgBox "Basic Add-In Example"
       End Sub
    						

    现在,有一个事件处理程序需要将代码添加到类连接在 MenuLine ConnectAddIn 方法。 要这样做您需要调用 MenuLine 对象的 ConnectEvents 方法。 此方法返回一个句柄,我们将使用更高版本断开连接事件处理程序。 下面是事件连接到类代码:
       hMenuLine = AddInMenuLine.ConnectEvents(Me)
    						

    还需要将代码添加到断开连接事件处理程序并删除在 MenuLine DisconnectAddIn 方法。 通过调用 DisconnectEvents 方法 MenuLine 对象的断开连接事件,且通过调用删除方法的 MenuItems 集合中删除该 MenuLine:
       AddInMenuLine.DisconnectEvents hMenuLine
       ThisInstance.AddInMenu.MenuItems.Remove AddInMenuLine
    						

    到目前为止整个类模块应类似以下:
      Option Explicit
    
      Private ThisInstance As VBIDE.Application
      Private AddInMenuLine As VBIDE.MenuLine
      Private hMenuLine As Long
    
      Public Sub ConnectAddIn(VBInstance As Object)
         Set ThisInstance = VBInstance
          Set AddInMenuLine = ThisInstance.AddInMenu.MenuItems.Add("Basic Add-_ 
                                                                 In")
         hMenuLine = AddInMenuLine.ConnectEvents(Me)
      End Sub
    
      Public Sub DisconnectAddIn(Mode As Integer)
         AddInMenuLine.DisconnectEvents hMenuLine
         ThisInstance.AddInMenu.MenuItems.Remove AddInMenuLine
      End Sub
    
      Public Sub AfterClick()
         MsgBox "Basic Add-In Example"
      End Sub
    					
  5. 自动添加外接程序 Vb.ini:

    在最小接程序,您添加加载项在 vb.ini 手动。 但是,是更便于用户如果存在此自动安装加载项。 为此需要使用 GetPrivateProfileString 检查如果它已被添加和 WritePrivateProfileString 以将其添加如果不存在。 最好将此代码放处于在 Sub Main 的 EXE 服务器。 但是,DLL 服务器,Sub Main 不执行因此这不起作用。 如果要创建一个 DLL 服务器则必须将其他位置,如安装程序中的此代码:
       #If Win16 Then
          Declare Function WritePrivateProfileString Lib "KERNEL" ( _
             ByVal AppName As String, ByVal KeyName As String, _
             ByVal keydefault As String, ByVal FileName As String) As Integer
          Declare Function GetPrivateProfileString Lib "KERNEL" ( _
             ByVal AppName As String, ByVal KeyName As String, _
             ByVal keydefault As String, ByVal ReturnString As String, _
             ByVal NumBytes As Integer, ByVal FileName As String) As Integer
       #ElseIf Win32 Then
          Declare Function WritePrivateProfileString Lib "KERNEL32" _
             Alias "WritePrivateProfileStringA" (ByVal AppName As String, _
             ByVal KeyName As String, ByVal keydefault As String, _
             ByVal FileName As String) As Long
          Declare Function GetPrivateProfileString Lib "KERNEL32" _
             Alias "GetPrivateProfileStringA" (ByVal AppName As String, _
             ByVal KeyName As String, ByVal keydefault As String, _
             ByVal ReturnString As String, ByVal NumBytes As Long, _
             ByVal FileName As String) As Long
       #End If
    
       Sub Main()
          #If Win16 Then
             Const Section = "Add-Ins16"
          #ElseIf Win32 Then
             Const Section = "Add-Ins32"
          #End If
          Const BufSize = 255
    
          Dim Ret As Variant
          Dim RetStr As String
    
          'Check to see if the entry is already in the Vb.ini file.
          'Add if not.
    
          RetStr = Space(BufSize)
          Ret = GetPrivateProfileString(Section, "Example.BasicAddin", _
             "NotFound", RetStr, BufSize, "VB.INI")
          RetStr = Left(RetStr, Ret)
          If RetStr = "NotFound" Then
             WritePrivateProfileString Section, "Example.BasicAddin", _
                "0", "VB.INI"
          End If
       End Sub
    					
  6. 测试基本的加载项:

    此时已创建基本外接。 若要测试,运行该项目。

    然后,启动 Visual Basic 在第二个实例。 从在第二个的实例转到加载项管理器,然后检查 example.BasicAddIn。 然后请转到 Visual Basic 加载项菜单。 您应该看到在 Visual Basic 加载项菜单下的新添加的菜单项。 单击在菜单,应显示消息框。

这篇文章中的信息适用于:
  • Microsoft Visual Basic 4.0 标准版
  • Microsoft Visual Basic 4.0 专业版
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
关键字:?
kbmt kbaddin kbhowto KB141932 KbMtzh
机器翻译机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。如果您发现了错误并希望帮助我们提高机器翻译技术,请完成文章末尾的在线调查。
点击这里察看该文章的英文版: 141932? (http://support.microsoft.com/kb/141932/en-us/ )
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

文章翻译