Cómo crear un complemento de COM de Office mediante Visual Basic .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 302896 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

Microsoft Office 2000 y posterior admite una arquitectura de nuevo diseño uniforme para creación de complementos de aplicación para mejorar y controlar las aplicaciones de Office. Estos complementos se denominan complementos COM. En este artículo paso a paso describe complementos COM de Office y describe cómo generar un COM de Office complemento utilizando Microsoft Visual Basic. NET.

La interfaz IDTExensibility2

Un complemento es un servidor COM en proceso o biblioteca de vínculos dinámicos (DLL) de ActiveX que implementa la interfaz IDTExensibility2 como se describe en la biblioteca de tipo de diseñador Microsoft Add-in (Msaddndr.dll). Todos los complementos COM heredan de esta interfaz y deben implementar cada uno de sus cinco métodos.

OnConnection

El evento OnConnection se desencadena siempre que el complemento está conectado. El complemento puede conectarse en el inicio, por el usuario final, o a través de automatización. Si OnConnection devuelve correctamente, el complemento se dice que se va a cargar. Si se devuelve un mensaje de error, la aplicación host libera su referencia para el complemento inmediatamente y se destruye el objeto.

OnConnection toma los parámetros de cuatro siguientes:
  • aplicación : referencia a objeto de la aplicación host.
  • ConnectMode - constante que especifica cómo se conecta el complemento. El complemento se puede conectar de las maneras siguientes:
    • el usuario final en el cuadro de diálogo complementos COM inicia ext_cm_AfterStartup - el complemento.
    • ext_cm_CommandLine : el complemento está conectado desde la línea de comandos. Tenga en cuenta que esto no se aplica a la creación de complementos COM para las aplicaciones de Office.
    • ext_cm_External - el complemento está conectado mediante una aplicación externa mediante automatización. Tenga en cuenta que esto no se aplica a la creación de complementos COM para Office aplicaciones.
    • ext_cm_Startup - el complemento se inicia por el host al iniciarse la aplicación. Este comportamiento se controla mediante una configuración en el registro.
  • AddInInst - una referencia al objeto COMAddIn que hace referencia a este complemento en la colección COMAddIns de la aplicación host.
  • personalizado - una matriz de valores de tipo Variant que puede contener datos definidos por el usuario.

OnDisconnection

El evento OnDisconnection se desencadena cuando el complemento se desconecta y justo antes de descarga de memoria. El complemento debe realizar la limpieza de recursos en este evento y debe restaurar los cambios realizados en la aplicación host.

OnDisconnection toma los dos parámetros siguientes:
  • RemoveMode - constante que especifica cómo se ha desconectado el complemento. El complemento se puede desconectar de las maneras siguientes:
    • ext_dm_HostShutdown : el complemento se desconecta cuando cierra la aplicación host.
    • ext_dm_UserClosed - el add - in está desconectado por el usuario final o una automatización controlador.
  • personalizado - una matriz de valores de tipo Variant que puede contener datos definidos por el usuario.

OnAddInsUpdate

El evento OnAddInsUpdate se desencadena cuando el conjunto de registrado COM cambios de complementos. En otras palabras, siempre que un complemento está instalado o quitado de la aplicación host, este evento se desencadena.

OnStartupComplete y OnBeginShutdown

Tanto el OnStartupComplete y los métodos OnBeginShutdown se llama cuando la aplicación host ha dejado o está entrando en un estado en que el usuario debe evitarse interacción porque la aplicación está ocupada cargando o descargando propio de la memoria. OnStartupComplete sólo se llama si el complemento se ha conectado durante el inicio y OnBeginShutdown sólo se llama si el host desconecta el complemento durante el apagado.

Debido a que la interfaz de usuario para la aplicación host es plenamente activa cuando estos eventos se desencadenan, pueden ser la única manera de realizar determinadas acciones en caso contrario, sería no está disponibles desde OnConnection y OnDisconnection .

Complemento COM de registro

Además el registro COM normal, un complemento necesita registrarse a sí mismo con cada aplicación de Office en el que se ejecuta. Para registrarse con una aplicación determinada, el complemento debe crear una subclave, con su ProgID como el nombre de la clave en la siguiente ubicación:
HKEY_CURRENT_USER\Software\Microsoft\Office\ OfficeApp \Addins\ ProgID
El complemento puede proporcionar valores en esta ubicación clave para un nombre descriptivo y una descripción completa. Además, el complemento debe especificar su comportamiento de carga deseada mediante un valor DWORD llamado
LoadBehavior
. Este valor determina cómo el complemento se carga por la aplicación host y se compone de una combinación de los siguientes valores:
  • 0 = Desconectar - no está cargado.
  • 1 = Conectado - está cargado.
  • 2 = Bootload - cargar al inicio de la aplicación.
  • 8 = DemandLoad - carga sólo cuando se solicitan por usuario.
  • 16 = ConnectFirstTime - carga sólo una vez (en el siguiente inicio).
El valor típico especificado es 0 x 03 (conectado | bootload).

Los complementos que implementan IDTExtensibility2 deben especificar también un valor DWORD llamado
CommandLineSafe
para indicar si los complementos son seguros para operaciones que no admiten una interfaz de usuario. Un valor de 0 x 00 indica FALSO y un valor de 0 x 01 indica que True.

Cómo crear un complemento mediante Visual Basic .NET

Como se mencionó anteriormente, un complemento de COM de Office es un COM en proceso servidor que se activa mediante una aplicación de Office a través de la capa de tiempo de ejecución COM. Por tanto, desarrollar un complemento COM en Visual Basic .NET requiere que el componente de complemento se implementa en .NET y, a continuación, expone a los clientes COM (es decir, las aplicaciones de Office) a través de la capa de interoperabilidad COM.

Para crear un complemento en Visual Basic. NET, siga estos pasos:
  1. En Visual Basic. NET, cree una biblioteca de clases proyecto.
  2. Agregue una referencia a la biblioteca de tipo que implementa IDTExtensibility2 . Para este ensamblado de interoperabilidad primario ya está disponible en el nombre de extensibilidad .
  3. Agregue una referencia a la biblioteca de objeto Microsoft Office. Para este ensamblado de interoperabilidad primario ya está disponible en el nombre de Office .
  4. Cree una clase pública en la biblioteca de clase que implementa IDTExtensibility2 .
  5. Después de la clase se genera la biblioteca, registrar la biblioteca para la interoperabilidad COM. Para ello, generar un seguro denominado ensamblado para esta biblioteca de clase y, a continuación, regístrelo con interoperabilidad COM. Puede utilizar Regasm.exe para registrar un componente de .NET para la interoperabilidad COM.
  6. Crear entradas del registro para que las aplicaciones de Office pueden reconocer y cargar el complemento.
Puede elegir completar todos estos pasos o puede crear un proyecto .NET del tipo de Complemento compartido . Esto inicia el Asistente de para extensibilidad, que le ayuda a crear un complemento en. NET.

El Asistente para extensibilidad crea un proyecto de biblioteca de clase de Visual Basic .NET junto con una clase de Conectar que implementa la interfaz IDTExtensibility2 . También se genera el código esqueleto que implementa a los miembros vacíos de IDTExtensibility . Este proyecto contiene referencias a ensamblados extensibilidad y Office. La configuración de generación del proyecto tiene que Registrar para interoperabilidad COM seleccionado. El archivo de clave (.snk) del ensamblado se genera y se hace referencia en el atributo AssemblyKeyfile en AssemblyInfo.vb.

Junto con el proyecto de biblioteca de clases, el asistente genera un proyecto de instalación que puede utilizar para implementar el complemento COM en otros equipos. Puede quitar este proyecto si lo desea.

Ejemplo paso a paso

  1. En el menú archivo en Visual Studio.NET, haga clic en nuevo y, a continuación, haga clic en proyecto .
  2. En el cuadro de diálogo Nuevo proyecto , expanda Otros proyectos en Tipos de proyecto , seleccione Proyectos de extensibilidad y seleccione la plantilla Add-in Shared .
  3. Escriba MyCOMAddin como nombre del complemento en y, a continuación, haga clic en Aceptar .
  4. Cuando aparezca el Asistente para extensibilidad, siga estos pasos:
    1. En página 1, seleccione crear un complemento utilizando Visual Basic y, a continuación, haga clic en siguiente .
    2. En página 2, seleccione las siguientes aplicaciones de host y, a continuación, haga clic en siguiente :
      • Microsoft Word
      • Microsoft PowerPoint
      • Microsoft Outlook
      • Microsoft Excel
      • Microsoft Access
    3. En la página 3, proporcione un nombre y una descripción para el complemento y, a continuación, haga clic en siguiente .

      Nota El nombre y la descripción de la macro aparecen en el cuadro de diálogo complemento COM en la aplicación de Office.

    4. En la página 4, seleccione todos de las opciones disponibles y, a continuación, haga clic en siguiente .
    5. Haga clic en Finalizar .
  5. Agregue el siguiente miembro a la clase Connect :
    Dim WithEvents MyButton As CommandBarButton 
  6. Implementar el código para todos los miembros de IDTExtensibility2 en la clase Connect , como sigue:
        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. Generar y probar el complemento. Para ello, siga estos pasos:
    1. En el menú Generar , haga clic en Generar MyCOMAddin . Tenga en cuenta que al generar el complemento se registra la clase de .NET con la interoperabilidad COM.
    2. Inicie uno de las aplicaciones de Office que seleccionó como aplicaciones de host para el complemento (por ejemplo, Microsoft Word o Microsoft Excel).
    3. Una vez iniciado el complemento, se desencadena el evento OnConnection y recibirá un cuadro de mensaje. Al descartar el cuadro de mensaje, se desencadena el evento de OnStartupComplete y recibirá un segundo cuadro de mensaje. Cerrar el cuadro de mensaje.
    4. Observe que el complemento agregado un nuevo botón personalizado con el título "Mi botón personalizado" a la barra de herramientas estándar.
    5. Haga clic en el botón personalizado . El evento Click para el botón está controlado por el complemento y recibirá un cuadro de mensaje. Cerrar el cuadro de mensaje.
    6. Salga de la aplicación de Office.
    7. Al salir de la aplicación, el OnBeginShutDown evento se desencadena y recibe un cuadro de mensaje. Para cerrar el cuadro de mensaje para finalizar la demostración.

Referencias

Para obtener información adicional sobre cómo escribir complementos COM, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
190253INFORMACIÓN: Los diseñadores de VB6 no funcionan en VB5
Para obtener más información acerca de cómo desarrollar soluciones basadas en Web para Microsoft Internet Explorer, consulte los sitios Web de Microsoft siguientes:
http://msdn2.microsoft.com/en-us/ie/default.aspx

http://support.microsoft.com/iep
(c) Microsoft Corporation 2001, reservados todos los derechos. Contribuciones por Diego r. Sawant, Microsoft Corporation.

Propiedades

Id. de artículo: 302896 - Última revisión: lunes, 25 de diciembre de 2006 - Versión: 11.3
La información de este artículo se refiere a:
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office Outlook 2003
  • Microsoft Outlook 2002 Standard
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
Palabras clave: 
kbmt kbautomation kbhowtomaster KB302896 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 302896

Enviar comentarios

 

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