Как построить Office 2000 надстройки COM в Visual Basic

Переводы статьи Переводы статьи
Код статьи: 238228 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

Microsoft Office 2000 и более поздних версий поддерживают, универсальную архитектуру для создания надстроек приложений и управлять приложениями Microsoft Office. Эти модули вызываются COM-надстройки. В данной статье демонстрируется создание COM-надстройки с помощью Visual Basic.

Дополнительная информация

COM-надстройка представляет inprocess сервер COM (ActiveX DLL), реализующий интерфейс IDTExensibility2, как описано в добавить В конструктор типа библиотеки Microsoft (Msaddndr.dll). Все надстройки COM наследуют этот интерфейс и должны применять каждый из пяти его методов.

OnConnection

Событием OnConnection срабатывает при каждом подключении COM в. Надстройка может подключаться при запуске, конечным пользователем, или с помощью автоматизации. Если успешно возвращает OnConnection надстройки называется загружаться. Если возвращается сообщение об ошибке, ведущее приложение немедленно освобождает свою ссылку на надстройку и объект уничтожается.

OnConnection принимает следующие четыре параметра:
  • Приложение - ссылку для объекта приложения узла.
  • ConnectMode - константа, указывающая способ подключения надстройки.
    • ext_cm_AfterStartup - при запуске конечным пользователем в диалоговом окне надстройки COM.
    • ext_cm_CommandLine - подключение из командной строки. (Не относится к созданию надстройки COM для приложений Microsoft Office.)
    • ext_cm_External - соединенных внешние приложения с помощью модели автоматизации. (Не относится к созданию надстройки COM для приложений Microsoft Office.)
    • ext_cm_Startup - запускается при запуске главного приложения. (Этот режим управляется параметром реестра).
  • AddInInst - ссылку на объект COMAddIn, который ссылается на эту надстройку в коллекции COMAddIns главного приложения.
  • Custom — массив типа Variant, который может содержать данные, определенные пользователем.

OnDisconnection

При отключении надстройки COM, и непосредственно перед выгружается из памяти, создается событие OnDisconnection. Надстройка должна выполнить очистку ресурсов в этом случае и восстановить все изменения, внесенные в ведущем приложении.

OnDisconnection принимает следующие два параметра:
  • RemoveMode - константа, указывающая способ отключения надстройки.
    • ext_dm_HostShutdown - отключения при закрытии ведущего приложения.
    • ext_dm_UserClosed - отключен, автоматический контроллер или конечному пользователю.
  • Custom — массив типа Variant, который может содержать данные, определенные пользователем.

OnAddInsUpdate

При изменении набора зарегистрированных надстроек COM, вызывается событие OnAddInsUpdate. Другими словами каждый раз, когда надстройка COM установке или удалении от ведущего приложения, это событие вызывается.

OnStartupComplete и OnBeginShutdown

OnStartupComplete и OnBeginShutdown методы вызываются, когда основное приложение покинул или переходит в состояние, где участие пользователя следует избегать, поскольку приложение занято загрузки или сам при выгрузке из памяти. OnStartupComplete вызывается только в том случае, если надстройка была подключена при запуске и OnBeginShutdown вызывается только в том случае, если добавить в отключении основным приложением во время завершения работы.

Поскольку интерфейс пользователя главного приложения активен при вызове этих событий, это может быть единственным способом выполнения определенных действий, которые в противном случае будут недоступны из OnConnection и OnDisconnection.

Регистрация надстройки COM

Помимо обычной регистрации COM надстройка COM должен зарегистрироваться в каждом приложении Office, в котором он работает. Зарегистрироваться в конкретном приложении, надстройка следует создать подраздел, с помощью его идентификатора ProgID в качестве имени для ключа находится в следующем месте:
HKEY_CURRENT_USER\Software\Microsoft\Office\<OfficeApp>\Addins\<ProgID>
Надстройки можно указать значения в этом разделе реестра понятное отображаемое имя и полное описание. Кроме надстройка должна указать предполагаемое поведение при загрузке с помощью DWORD с именем «loadbehavior.» Это значение определяет, как надстройка загружается ведущим приложением и состоит из комбинации следующих значений:
  • 0 = Отключить — не загружен.
  • 1 = Подключен - загрузки.
  • 2 = Bootload — загрузка при запуске приложения.
  • 8 = DemandLoad — загрузка только по прямому запросу пользователя.
  • 16 = ConnectFirstTime - загрузка только один раз (при следующем запуске).
Стандартное значение — 0x03 (Connected | Загружено).

Надстройки, которые реализуют интерфейс IDTExtensibility2 следует также указать тип DWORD значение вызванного «CommandLineSafe» для указания того, являются ли они безопасными для операций, которые не поддерживают интерфейс пользователя. Значение 0x00 означает, что значение False, 0x01 имеет значение True.

Создание надстройки COM

Можно создать надстройку COM в одном из трех указанных ниже способов:

Создание надстройки COM, используя шаблон Com-надстройки

При наличии разработчиков Microsoft Office 2000 или Microsoft Office XP для разработчиков и Visual Basic 6.0, самый простой способ для создания COM-надстройка является использование шаблона COM добавить in.vbp. Этот проект находится во вложенной папке ODETools\V9\Samples\OPG\Samples\CH11\VB_COM_AddIn на компакт-ДИСК Office 2000 разработчика. Скопируйте файлы из этой папки в папку Template\Projects Visual Basic 6.0, которая обычно C:\Program Files\Microsoft Visual Studio\VB98\Template\Projects. Скопировать в папку проекта шаблона будет гарантировать, что шаблон появится в диалоговом окне Новый проект Visual Basic 6.0. Обратитесь к главе 11 Microsoft Office 2000 Visual Basic Руководство программиста для получения дополнительных сведений о этот шаблон и создание COM-надстройки.

Создание надстройки COM с помощью конструктора Visual Basic 6 надстройки

Если имеется только в Microsoft Visual Basic 6.0 установлена и требуется использовать оболочку таким образом, нет необходимости напрямую реализовать интерфейс IDTExtensibility2, можно использовать тот же добавить В конструктор, который используется для построения приложений VB6 надстройки, выполните следующие действия для создания таких надстроек для Microsoft Excel 2000 или 2002:
  1. Запустите Microsoft Visual Basic 6.0 и выберите Надстройка в качестве типа проекта. Это следует добавить класс конструктора для проекта (подключение) и формы (frmAddin).
  2. Открыть Конструктор окно для подключения, а затем выберите Microsoft Excel из Приложение раскрывающийся список.
  3. В Режим начальной загрузки раскрывающийся список выбора Автозагрузка.
  4. Удалить frmAddin из проекта.
  5. Из Проект окно, щелкните правой кнопкой мыши Подключение элемент, а затем выберите Просмотр кода.
  6. Удалите весь код в окно кода конструктора. Этот код работает для надстроек VB, но не надстройками Office.
  7. Добавьте следующий код в конструктор.
       Option Explicit
    
       Dim oXL As Object
       Dim WithEvents MyButton As Office.CommandBarButton
    
       Private Sub AddinInstance_OnConnection(ByVal Application As Object, _
        ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
        ByVal AddInInst As Object, custom() As Variant)
          On Error Resume Next
          MsgBox "My Addin started in " & Application.Name
       
          Set oXL = Application
       
          Set MyButton = oXL.CommandBars("Standard").Controls.Add(1)
             With MyButton
                .Caption = "My Custom Button"
                .Style = msoButtonCaption
    
              ' The following items are optional, but recommended. 
              ' The Tag property lets you quickly find the control 
              ' and helps MSO keep track of it when there is more than
              ' one application window visible. The property is required
              ' by some Office applications and should be provided.
    
                .Tag = "My Custom Button"
     
              ' The OnAction property is optional but recommended. 
              ' It should be set to the ProgID of the add-in, such that if
              ' the add-in is not loaded when a user presses the button,
              ' MSO loads the add-in automatically and then raises
              ' the Click event for the add-in to handle. 
    
                .OnAction = "!<" & AddInInst.ProgId & ">"
    
                .Visible = True
             End With
       
       End Sub
    
       Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As _
          AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
          On Error Resume Next
          MsgBox "My Addin was disconnected by " & _
             IIf(RemoveMode = ext_dm_HostShutdown, _
             "Excel shutdown.", "end user.")
          
          MyButton.Delete
          Set MyButton = Nothing
          Set oXL = Nothing
        End Sub
    
       Private Sub MyButton_Click(ByVal Ctrl As Office.CommandBarButton, _
         CancelDefault As Boolean)
          MsgBox "Our CommandBar button was pressed!"
       End Sub
  8. Сохраните проект и создать MyAddin.dll. Конструктор будет регистрировать надстройки для вас.
  9. Откройте Microsoft Excel и заметить окно сообщения при надстройка загружается и выгружается. На панели инструментов Стандартная получат новые кнопки с надписью Моя настраиваемая кнопка что наш расширения обработки при выборе.

Создание надстройки COM с помощью implements

Пока не очень просто, можно создать надстройку COM с помощью Microsoft Visual Basic 5.0 и Реализует Ключевое слово непосредственно реализует интерфейс IDTExtensibility2. Единственным недостатком этого подхода является регистрация. Так как Microsoft Visual Basic не знает, как добавить ключи, необходимые для регистрации надстройки в Microsoft Office, необходимо будет сделать отдельно (в служебной программы настройки или с помощью сценария REG).

Однако преимущество использования реализует является более прямой и эффективным, чем с помощью конструктора, что позволяет нам создать один объект COM, который может работать в нескольких приложениях Office (вместо того, чтобы создавать отдельный объект подключения для каждого приложения, нам необходимо работать).

Ниже приведены шаги, необходимые для написания надстройки используя реализует.
  1. Откройте Visual Basic и создайте новый проект ActiveX DLL. Имя проекта MyCOMAddinи имя открытого класса Подключение.
  2. Из Ссылки диалоговое окно (проекта | Ссылки), добавьте ссылку на библиотеку объектов Microsoft Office версии 9.0 (или 10.0 для Office XP) и библиотеки типов Microsoft добавить В конструктор. Не удается найти конструктор надстройки в списке ссылок, следует просматривать для Msaddndr.dll или Msaddndr.tlb, обычно находится в папке «C:\Program files\common files\designer».
  3. В Код окно для подключения, добавьте следующий код:
       Option Explicit
       Implements IDTExtensibility2
    
       Dim oHostApp As Object
       Dim WithEvents MyButton As Office.CommandBarButton
    
      Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, _
         ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
    
         ByVal AddInInst As Object, custom() As Variant)
      
          On Error Resume Next
        ' Set a reference to the host application...
          Set oHostApp = Application
       
        ' If you aren't in startup, then manually call OnStartupComplete...
          If (ConnectMode <> ext_cm_Startup) Then _
             Call IDTExtensibility2_OnStartupComplete(custom)
          
       End Sub
    
       Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)
          Dim oCommandBars As Office.CommandBars
          Dim oStandardBar As Office.CommandBar
       
          On Error Resume Next
        ' Set up a custom button on the "Standard" commandbar...
          Set oCommandBars = oHostApp.CommandBars
          If oCommandBars Is Nothing Then
           ' Outlook has the CommandBars collection on the Explorer object
             Set oCommandBars = oHostApp.ActiveExplorer.CommandBars
          End If
       
          Set oStandardBar = oCommandBars.Item("Standard")
          If oStandardBar Is Nothing Then
           ' Access names it's main toolbar Database
    
             Set oStandardBar = oCommandBars.Item("Database")
          End If
       
        ' In case the button was not deleted, use the exiting one...
          Set MyButton = oStandardBar.Controls.Item("My Custom Button")
             If MyButton Is Nothing Then
    
                Set MyButton = oStandardBar.Controls.Add(1)
                With MyButton
                   .Caption = "My Custom Button"
                   .Style = msoButtonCaption
     
              ' The following items are optional, but recommended. 
              ' The Tag property lets you quickly find the control 
              ' and helps MSO keep track of it when there is more than
              ' one application window visible. The property is required
              ' by some Office applications and should be provided.
    
                .Tag = "My Custom Button"
     
              ' The OnAction property is optional but recommended. 
              ' It should be set to the ProgID of the add-in, such that if
              ' the add-in is not loaded when a user presses the button,
              ' MSO loads the add-in automatically and then raises
              ' the Click event for the add-in to handle. 
    
                   .OnAction = "!<MyCOMAddin.Connect>"
    
                   .Visible = True
                End With
             End If
     
        ' Display a simple message to know which application you started in...
          MsgBox "Started in " & oHostApp.Name & "."
    
          Set oStandardBar = Nothing
          Set oCommandBars = Nothing
       End Sub
    
       Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As _
         AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
    
          On Error Resume Next
          If RemoveMode <> ext_dm_HostShutdown Then _
             Call IDTExtensibility2_OnBeginShutdown(custom)
          
          Set oHostApp = Nothing
    
       End Sub
    
       Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)
          On Error Resume Next
        ' Notify the user you are shutting down, and delete the button...
          MsgBox "Our custom Add-In is unloading."
          MyButton.Delete
          Set MyButton = Nothing
       End Sub
    
       Private Sub MyButton_Click(ByVal Ctrl As Office.CommandBarButton,    CancelDefault As Boolean)
          MsgBox "Our CommandBar button was pressed!"
       End Sub
    
       Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)
          'You do nothing if this is called, but you need to
          'add a comment so Visual Basic properly implements the function...
       End Sub
  4. Сохраните проект и создать MyCOMAddin.dll. Перед началом работы надстройки необходимо сопоставить каждое приложение Microsoft Office, необходимо запустить его. В реальном мире программа установки можно сделать при установке библиотеки DLL. Для этого примера будет вызывать функцию регистрации непосредственно из среды разработки Visual Basic.
  5. Добавьте в проект новый модуль. Добавьте следующие строки в коде Module1.
       Option Explicit
    
       Private Declare Function RegCreateKeyEx Lib "advapi32.dll" _
       Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
       ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As _
       Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, _
       phkResult As Long, lpdwDisposition As Long) As Long
       
       Private Declare Function RegSetValueEx Lib "advapi32.dll" _
       Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As _
       String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _
       ByVal cbData As Long) As Long
       
       Private Declare Function RegDeleteKey Lib "advapi32.dll" _
       Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) _
       As Long
       
       Private Declare Function RegCloseKey Lib "advapi32.dll" _
       (ByVal hKey As Long) As Long
    
       Private Const HKEY_CURRENT_USER = &H80000001
       Private Const KEY_ALL_ACCESS = &H1F0037
       Private Const REG_CREATED_NEW_KEY = &H1
       Private Const REG_SZ = 1
       Private Const REG_DWORD = 4
    
       'These are the settings for your Add-in...
       Private Const PROGID As String = "MyCOMAddin.Connect"
       Private Const DESCRIPTION As String = "My VB5/6 COM Add-In Sample"
       Private Const LOADBEHAVIOR As Long = 3
       Private Const SAFEFORCOMMANDLINE As Long = 0
    
    
       Public Sub RegisterAll()
          RegisterOfficeAddin "Access"
          RegisterOfficeAddin "Excel"
          RegisterOfficeAddin "FrontPage"
          RegisterOfficeAddin "Outlook"
          RegisterOfficeAddin "PowerPoint"
          RegisterOfficeAddin "Word"
       End Sub
    
       Public Sub UnregisterAll()
          UnRegisterOfficeAddin "Access"
          UnRegisterOfficeAddin "Excel"
          UnRegisterOfficeAddin "FrontPage"
          UnRegisterOfficeAddin "Outlook"
          UnRegisterOfficeAddin "PowerPoint"
          UnRegisterOfficeAddin "Word"
       End Sub
    
       Public Sub RegisterOfficeAddin(sTargetApp As String)
          Dim sRegKey As String
          Dim nRet As Long, dwTmp As Long
          Dim hKey As Long
       
          sRegKey = "Software\Microsoft\Office\" & sTargetApp _
             & "\Addins\" & PROGID
       
          nRet = RegCreateKeyEx(HKEY_CURRENT_USER, sRegKey, 0, _
             vbNullString, 0, KEY_ALL_ACCESS, 0, hKey, dwTmp)
          
          If nRet = 0 Then
             If dwTmp = REG_CREATED_NEW_KEY Then
                Call RegSetValueEx(hKey, "FriendlyName", 0, _
                   REG_SZ, ByVal PROGID, Len(PROGID))
                Call RegSetValueEx(hKey, "Description", 0, _
                   REG_SZ, ByVal DESCRIPTION, Len(DESCRIPTION))
                Call RegSetValueEx(hKey, "LoadBehavior", 0, _
                   REG_DWORD, LOADBEHAVIOR, 4)
                Call RegSetValueEx(hKey, "CommandLineSafe", 0, _
                   REG_DWORD, SAFEFORCOMMANDLINE, 4)
             End If
             Call RegCloseKey(hKey)
          End If
       
       End Sub
    
       Public Sub UnRegisterOfficeAddin(sTargetApp As String)
          Dim sRegKey As String
          sRegKey = "Software\Microsoft\Office\" & sTargetApp _
             & "\Addins\" & PROGID
       
           Call RegDeleteKey(HKEY_CURRENT_USER, sRegKey)
       
       End Sub
  6. Из Немедленно окно (Вид | Окно интерпретации), тип RegisterAll, а затем нажмите клавишу ВВОД. Это зарегистрирует надстройку для всех приложений Office поддерживаются (Access, Excel, FrontPage, Outlook, PowerPoint и Word).
  7. Откройте любой предыдущий перечисленные приложения Office. Обратите внимание, в окне сообщения запуска и завершения работы и специальная кнопка добавляется стандартная панель инструментов.
  8. Если вы хотите отменить регистрацию надстройки, введите Что в окна интерпретации Visual Basic и нажмите клавишу ВВОД.

Ссылки

"Microsoft Office 2000 Visual Basic Programmer's Guide", Глава 11. Надстроек, шаблонов, мастеров и библиотек.

Для получения дополнительных сведений о создании надстроек COM щелкните следующие номера статей базы знаний Майкрософт:
230689Пример: Comaddin.exe Office 2000 надстройки COM в Visual C++
190253 Конструкторы VB6 не работают в VB5
Для получения дополнительных сведений о разработке веб-приложений для Microsoft Internet Explorer посетите следующий веб-узел корпорации Майкрософт:
http://MSDN.Microsoft.com/IE/
Примечание При добавлении элемента меню в Microsoft Office Word из надстройки COM Visual Basic, выполнив действия, перечисленные в этой статье или аналогичным способом, элемент меню не работает должным образом. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
313948Слово теряет ссылку на элементы меню объекта COM (CommandBarControl)

Свойства

Код статьи: 238228 - Последний отзыв: 4 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft FrontPage 2002 Standard Edition
  • Microsoft FrontPage 2000 Standard Edition
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Outlook 2000 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Ключевые слова: 
kbautomation kbhowto kbmt KB238228 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:238228

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com