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

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

本页

展开全部 | 关闭全部

概要

本文介绍如何创建外接程序的工作 Visual Basic 4.0 基本框架。

更多信息

创建最少的加载项

它至少 Visual Basic 外接程序是 OLE 自动化服务器,其中提供了 ConnectAddin 和 DisconnectAddin 方法的对象。 可以创建 OLE 自动化服务器的任何语言中,可以编写服务器。

若要创建最小加载项使用可视化的基本 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. 使外接程序管理器对的外接程序可用:

    现在,您需要使最少的加载项可向外接程序管理器。 外接程序将在下添加 Ins16 或添加 Ins32 部分,具体取决于是否在运行 16 位或 32 位版本的 Visual Basic Vb.ini 中查找。 外接程序管理器查找可用的加载进程 id 的窗体中的 = 的 n 其中 ProgID 是程序在 OLE 自动化 id 为您的类,n 是 0 或 1。 0 表示外接程序是可用但 Visual Basic 没有加载它。 1 表示外接程序是或应能加载。 为最少添加-在 32 位 vba 中,您需要在 Vb.ini 中添加以下:
       [Add-Ins32]
       Example.MinimalAddIn=0
    					
  7. 测试外接程序:

    这是它的最小的加载项。 现在可以测试它。 继续操作并启动外接程序通过运行该项目。 您必须启动 Visual Basic 的第二个实例对其进行测试。 第二个实例中生成外接程序管理器对话框。 应该有一个复选框,用来在它的程序 id 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。
  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
    						

    现在,您有一个事件处理程序,您需要将代码添加到 ConnectAddIn 方法将在 MenuLine 连接到类。 若要执行此操作需要调用 MenuLine 对象的 ConnectEvents 方法。 此方法返回一个句柄,我们将稍后使用断开连接事件处理程序。 以下是用于连接到类的事件代码:
       hMenuLine = AddInMenuLine.ConnectEvents(Me)
    						

    您还需要将代码添加到的断开连接事件处理程序,并移除该 MenuLine DisconnectAddIn 方法。 通过调用 DisconnectEvents 方法 MenuLine 对象的事件都将断开连接,并通过调用 MenuItems 集合的 Remove 方法删除该 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和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
 

文章翻译