Uno de los proyectos en los que trabajo actualmente trata de crear un componente común a varias aplicaciones de una empresa. Dichas aplicaciones son todas web y el componente trata de automatizar un proceso que solo puede ocurrir del lado del cliente: capturar la firma digital hecha por un usuario de cualquiera de estas aplicaciones a través de un tableta conectada a un ordenador por USB. Así que como solución se optó por crear un ActiveX ya que como política de la empresa todos eran ordenadores Windows que usaban Microsoft Internet Explorer como navegador.

Yo nunca antes había hecho un ActiveX así que comencé a buscar información en la web. Aunque existen muchos sitios en los cuales se puede encontrar información acerca de este tema. La solución final fue el resultado de lo encontrado en diversos lugares. Este artículo resume todos los pasos que necesité para completar la construcción del ActiveX, y espero que me sirva como referencia en el futuro.

1.) Creando el control ActiveX

Lo primero que haremos es crear un proyecto en VisualStudio del tipo Librería de Clases (Class Library). En la que añadiremos un UserControl en el pondremos un botón y en el evento clic de este mostraremos un mensaje.

SolucionInicial La clase “MyUserControl” deberemos marcarla con los siguientes atributos:

  1. Guid –> Identificador de la clase cuando esta sea expuesta en COM
  2. ComVisible –> Expone la clase para que sea visible desde COM
  3. ClassInterfaceAttribute –> Es el tipo de Interface COM que encapsulará a la clase (mas información en MSDN)

Tip: Si tu ensamblado va a tener más de una clase asegúrate de que esté marcado como NO visible para COM y solo marca las clases realmente quieras exponer.

[assembly: ComVisible(false)]
Al final tenemos algo como en código que sigue a continuación.
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace MyActiveX
{
    [ClassInterface(ClassInterfaceType.AutoDispatch)]
    [ComVisible(true), Guid("D857B4F5-8684-453e-82C8-7F493CBE5592")]
    public partial class MyUserControl : UserControl
    {
        public MyUserControl()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hola Mundo");
        }
    }
}

2.) Incrustando el control en la página HTML

Para mostrar el control en una página web primero hay que instalarlo, ese será el siguiente paso, y luego solo hay que utilizar el tag object como se muestra a continuación. Ten en cuenta que el atributo classid debes poner el GUID con que has decorado la clase en C#



    

Este texto se mostrará si se abre la página con un browser no compatible o si el ActiveX no está instalado correctamente.

3.) Instalando el AcativeX

Para instalar el ActiveX una de las opciones que tenemos es la de crear un instalador que además de dar la opción de ubicar los archivos necesarios para que la aplicación funcione, registre el ensamblado (DLL) que contiene la clase que queremos exponer en COM. Solo hará falta añadir el proyecto principal al proyecto de instalación de VisualStudio.

PrimaryOutput

Seleccionando el “Primary output from MyActiveX” y visualizando sus propiedades, podremos marcar la DLL para que se registre en COM durante la instalación.

InstaladorUna vez hecho esto generamos el instalador lo instalamos en el ordenador y al abrir Internet Explorer y navegar a la página de demostración, vemos el control que hemos creado previamente.

html

y si hacemos clic en el botón vemos que funciona tal y como esperábamos.

holamundo

En un próximo post trataré el tema de la interacción entre el ActiveX y el Navegador.

 

Puedes descargarte el código fuente desde aquí


 |