Как создать надстройку COM для Office с помощью Visual Basic .NET

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

В этой статье

Аннотация

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

Интерфейс IDTExensibility2

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

OnConnection

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

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

OnDisconnection

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

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

OnAddInsUpdate

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

OnStartupComplete и OnBeginShutdown

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

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

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

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

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

Инструкции по созданию надстройки с помощью Visual Basic .NET

Как упоминалось выше, надстройка Office COM представляет собой внутрипроцессорный сервер COM, который активируется приложением Office через подключаемый при выполнении уровень COM. Таким образом, разработка надстройки COM в Visual Basic .NET требует, чтобы компонент надстройки был применен в .NET, а затем стал доступен клиентам COM (то есть приложениям Office) через уровень COM-взаимодействия.

Чтобы создать надстройку COM в Visual Basic .NET, выполните следующие действия.
  1. В Visual Basic .NET создайте проект библиотеки классов.
  2. Добавьте ссылку в библиотеку типов, которая реализует IDTExtensibility2. Исходная сборка взаимодействия для этого интерфейса доступна под именем Extensibility.
  3. Добавьте ссылку на библиотеку объектов Microsoft Office. Исходная сборка взаимодействия для нее доступна под именем Office.
  4. Создайте открытый класс в библиотеке классов, которая реализует интерфейс IDTExtensibility2.
  5. После построения библиотеки классов зарегистрируйте ее для COM-взаимодействия. Для этого создайте для данной библиотеки классов сборку со строгим именем и зарегистрируйте ее, используя взаимодействие COM. Регистрацию компонента .NET для взаимодействия с COM можно выполнить с помощью программы Regasm.exe.
  6. Чтобы приложения Microsoft Office могли обнаружить и загрузить надстройку, создайте соответствующие записи в реестре.
Данные шаги могут быть выполнены вручную либо при создании проекта можно выбрать тип Общая надстройка. Это приведет к запуску мастера Extensibility, который поможет создать надстройку COM в .NET.

Мастер Extensibility создает проект библиотеки классов Visual Basic .NET с классом Connect, реализующим интерфейс IDTExtensibility2. Также создается скелет кода, реализующий пустые члены интерфейса IDTExtensibility. Такой проект ссылается на сборки Extensibility и Office. В параметрах сборки данного проекта установлен флажок Регистрация для COM-взаимодействия. При этом создается ключевой файл сборки (SNK), на который указывает атрибут AssemblyKeyfile в файле Assemblyinfo.vb.

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

Пошаговый образец

  1. В меню Файл приложения Microsoft Visual Studio .NET выберите команду Создать, а затем — Проект.
  2. В диалоговом окне Создать проект разверните список Другие проекты в группе Типы проектов, выберите пункт Проекты расширения среды, а затем — шаблон Общая надстройка.
  3. Введите в качестве имени надстройки MyCOMAddin и нажмите кнопку OK.
  4. После запуска мастера Extensibility выполните следующие действия.
    1. В первом окне выберите параметр Создать надстройку с помощью Visual Basic и нажмите кнопку Далее.
    2. Во втором окне выберите следующие приложения размещения и нажмите кнопку Далее:
      • Microsoft Word
      • Microsoft PowerPoint
      • Microsoft Outlook
      • Microsoft Excel
      • Microsoft Access
    3. В третьем окне введите имя и описание надстройки, а затем нажмите кнопку Далее.

      Примечание. Имя и описание надстройки отображается в диалоговом окне Надстройки для модели компонентных объектов (COM) приложения Office.

    4. В четвертом окне выберите доступные параметры и нажмите кнопку Далее.
    5. Нажмите кнопку Готово.
  5. Добавьте к классу Connect следующий член:
    Dim WithEvents MyButton As CommandBarButton 
  6. Примените код ко всем членам IDTExtensibility2 в классе Connect следующим образом:
        Public Sub OnBeginShutdown(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnBeginShutdown
            On Error Resume Next
            ' Notify the user you are shutting down, and delete the button.
            MsgBox("Our custom Add-in is unloading.")
            MyButton.Delete()
            MyButton = Nothing
    
        End Sub
    
        Public Sub OnAddInsUpdate(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
            '
        End Sub
    
        Public Sub OnStartupComplete(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnStartupComplete
    
            Dim oCommandBars As CommandBars
            Dim oStandardBar As CommandBar
    
            On Error Resume Next
            ' Set up a custom button on the "Standard" command bar.
            oCommandBars = applicationObject.CommandBars
            If oCommandBars Is Nothing Then
                ' Outlook has the CommandBars collection on the Explorer object.
                oCommandBars = applicationObject.ActiveExplorer.CommandBars
            End If
    
            oStandardBar = oCommandBars.Item("Standard")
            If oStandardBar Is Nothing Then
                ' Access names its main toolbar Database.
    
                oStandardBar = oCommandBars.Item("Database")
    
            End If
    
            ' In case the button was not deleted, use the exiting one.
            MyButton = oStandardBar.Controls.Item("My Custom Button")
            If MyButton Is Nothing Then
    
                MyButton = oStandardBar.Controls.Add(1)
                With MyButton
                    .Caption = "My Custom Button"
                    .Style = MsoButtonStyle.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 more than
                    ' one application window is 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, so that if
                    ' the add-in is not loaded when a user clicks 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 show which application you started in.
            MsgBox("Started in " & applicationObject.Name & ".")
    
    
            oStandardBar = Nothing
            oCommandBars = Nothing
    
    
        End Sub
    
        Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection
    
            On Error Resume Next
            If RemoveMode <> Extensibility.ext_DisconnectMode.ext_dm_HostShutdown Then _
               Call OnBeginShutdown(custom)
    
            applicationObject = Nothing
    
    
        End Sub
    
        Public Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection
    
    
            MsgBox("On Connection In MyAddin")
            applicationObject = application
            addInInstance = addInInst
    
    
            ' If you aren't in startup, manually call OnStartupComplete.
            If (connectMode <> Extensibility.ext_ConnectMode.ext_cm_Startup) Then _
               Call OnStartupComplete(custom)
    
        End Sub
    
    
        Private Sub MyButton_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, ByRef CancelDefault As Boolean) Handles MyButton.Click
            MsgBox("Our CommandBar button was pressed!")
        End Sub
    					
  7. Произведите сборку и проверку надстройки COM. Для этого выполните следующие действия.
    1. В меню Построение выберите пункт Построить MyCOMAddin. Обратите внимание, что при сборке надстройки COM класс .NET регистрируется с взаимодействием COM.
    2. Запустите одно из приложений Office, которое было выбрано для размещения надстройки (например, Microsoft Word или Microsoft Excel).
    3. После запуска надстройки вызывается событие OnConnection и на экране появляется окно сообщения. После закрытия окна сообщения вызывается событие OnStartupComplete и появляется второе окно сообщения. Закройте это окно.
    4. Обратите внимание, что надстройка добавляет на панель задач новую кнопку с надписью «Моя настраиваемая кнопка».
    5. Нажмите кнопку Моя настраиваемая кнопка. При этом надстройка обработает событие Click для данной кнопки и на экране появится окно сообщения. Закройте это окно.
    6. Закройте приложение Office.
    7. После закрытия приложения вызывается событие OnBeginShutDown и на экране появляется окно сообщения. Для завершения демонстрации закройте окно с сообщением.

Ссылки

За дополнительной информацией о создании надстроек COM обратитесь к следующей статье Microsoft Knowledge Base:
190253 INFO: VB6 Designers Do Not Work in VB5
За дополнительной информацией о разработке решений с использованием интернет-технологий для Microsoft Internet Explorer обратитесь на следующие веб-узлы корпорации Microsoft Web:
http://msdn.microsoft.com/workshop/entry.asp

http://msdn2.microsoft.com/en-us/ie/default.aspx

http://support.microsoft.com/ph/2073
(c) Корпорация Майкрософт (Microsoft Corporation), 2001. Все права защищены. Статья подготовлена при участии Раньита Р. Саванта (Ranjit R. Sawant), корпорация Microsoft.

Свойства

Код статьи: 302896 - Последний отзыв: 25 декабря 2006 г. - Revision: 9.1
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office Outlook 2003
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
Ключевые слова: 
kbautomation kbhowtomaster KB302896

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

 

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