Sección de tutoriales y manuales vb

Crear un evento en una Dll Activex

Volver



 

 

 

El siguiente ejemplo muestra como crear un evento en una Dll Activex para poder de esta manera interceptar dicho evento desde el programa o Formulario que ejecuta la Dll

 

El mismo es muy simple y consiste en una función que suma dos números. Dentro de la dll se crea un evento llamado Error, si se produce un error en la función, es decir dentro de la dll, se lanza el mismo y se intercepta desde el formulario.

 

 

 

Pasos para crear el ejemplo

Iniciar un nuevo Proyecto de tipo Exe estándar. Ahora desde el menú Archivo, seleccionar la opción Agregar Proyecto. En la ventana seleccionar Proyecto de tipo dll Activex. De esta forma tendremos dos proyectos.

En el proyecto de tipo Dll, seleccionar el módulo de clase que por defecto llamado Class1, y cambiarle el nombre por DllPrueba. En la ventana de explorador de proyectos de visual basic quedará de la siguiente manera:

vista de la ventana de exploración de proyectos de visual basic para añadir un grupo de proyectos

 

Ahora abrir la ventana de código del módulo de clase para definir y escribir el código, que tendrá la función llamada Sumar, y la declaración del evento:

 

Pegar lo siguiente en el módulo de clase:

' Evento que se ejecutará al producirse un error _
  dentro del la función Sumar

Public Event Error(Descripcion As String, NumeroError As Long)



'Función Pública
Function Sumar(Num1 As Variant, Num2 As Variant) As Long

On Error GoTo ErrSub

'Devuelve el valor de la suma
Sumar = Num1 + Num2


Exit Function


ErrSub:

'Lanza el evento de la dll, pasándole los parámetros
RaiseEvent Error(Err.Description, Err.Number)

End Function 

 

En la primer línea del código anterior, se declara el evento llamado Error y se le crean dos parámetros, uno para la descripción del error, y otro para el número del mismo.

Si se produce un error dentro de la función Sumar, se pasará a ejecutar lo que esté en la etiqueta de error errSub, y como se ve en el código, se lanza o dispara el evento Error, con la instrucción RaiseEvent.

Ahora guardar todos los proyectos en una carpeta. Al tener dos proyectos se creará también un grupo de proyectos, por defecto llamado Grupo1.vbg

El paso siguiente será agregar en el formulario del proyecto de tipo Exe, dos controles Textbox y un Command1. El text1 será para ingresar el primer número que se le pasará a la función Sumar, y el Text2 para el otro número. El Command1 ejecuta o llama la función Sumar.

 

En el formulario quedará algo así:

vista del formulario para probar la dll activex

 

El siguiente paso será incluir en el Proyecto Exe, la referencia a la la Dll para poder utilizarla y probarla. Entonces, desde el menú Referencias, buscar el nombre Proyecto2 y marcarlo

 

ventana de referencia de visual basic para incluir la dll Proyecto2 para poder utilizarla desde el Form1l

 

Lo siguiente será, ( siempre desde el proyecto Exe ) , crear una variable de Objeto, en la sección de declaraciones, que sea de tipo DllPrueba, y automáticamente visual basic al escribir "As", mostrará en la lista de tipos el nombre del módulo de clase DllPrueba.

vista de la lista de tipos y clases de datos de visual basic

 

Pero para poder utilizar el evento Error que se había declarado en el módulo de clase, notar que hay que utilizar la palabra o instrucción WithEvents. Al crear la variable de objeto "Prueba" de esta forma, la misma podrá recibir eventos. y una ves declarada, podrás ver en la sección de la ventana de código, en el combo izquierdo donde está la lista de objetos y controles del formulario, que ahora aparece el objeto Prueba

 

ventana de código de Form1 desplegando el objeto de tipo dll prueba

 

y si lo seleccionas, podrás ver en el otro combo, como aparece la lista de eventos declarados en la Dll, en este caso solo aparecerá uno solo obviamente, el evento Error.

 

Vista de la ventana de código para visualizar el evento error del Activex

 

Probar como funciona el evento de la Dll

 

Colocar como se dijo, un Text1, un Text2 y un Command1. El código para ejecutar la suma, llamando al método Sumar, sería el siguiente:

Option Explicit

Private WithEvents Prueba As DllPrueba


Private Sub Command1_Click()

Dim Resultado As Long

' Llama a la función de la Dll pasándole los valores

Resultado = Prueba.Sumar(text1, Text2)


Me.Caption = Resultado


End Sub

'Esto es para crear la instancia de la Dll
Private Sub Form_Load()
Set Prueba = New DllPrueba

End Sub 

 

Y el código a colocar dentro del procedimiento del Evento Error en el Form1, será unos simples MsgBox para mostrar los valores de los parámetros

Private Sub Prueba_Error(Descripcion As String, NumeroError As Long)


'Muestra el valor del parámetro Descripcion
MsgBox "Descripción del Error:" & Descripcion, vbCritical

'Muestra el valor del parámetro NumeroError
MsgBox " Número de Error: " & NumeroError, vbCritical

End Sub 

 

Ahora se puede probar el Proyecto. Si ingresas valores numéricos en los textBox, no ocurrirá nada, solo ejecutará la función Sumar y podrás ver el resultado. Pero si pasas un valor que no sea numérico, por ejemplo:

Call Prueba.Sumar (345, "Hola")

 

captura del la prueba

 

...podrás ver que se dispara el evento Error y muestra el valor recibido de los parámetros del procedimiento de evento.

Nota: Por último, el evento declarado en la dll, en este caso, obviamente debe estar declarado como Público para poder accederlo desde fuera. Osea , esto sería incorrecto:

Private Event Error(Descripcion As String, NumeroError As Long)

 

En este enlace está el proyecto para descargar

Descargar ejemplo

 


Enlaces relacionados

  1. Tutorial sobre los módulos de clase en vb

 

 


Buscar en Recursos vb