Amigo(a), mil mil gracias. No sabes cuanto te lo agradezco!!!
Te juro que lo siguiente que te escribo no es para hacerte la “barba”, como decimos aquí en Mexico. Con tus ejemplos he entendido mejor esto de las clases, y la clave para que se solucionara mi problema, fue el ultimo comentario que hiciste:
fíjate que no señalo ninguna ruta... ¿ por qué ? te preguntaras... porque cuando he compilado el proyecto automáticamente se ha registrado la librería.
Y la solucion fue:
Dim Ejec_1 As Object
Set Ejec_1 = CreateObject("XProyEjec.XClsEjec")
Ejec_1.Ejecutor 1
Set Ejec_1 = Nothing
O sea, usando tu ejemplo, yo lo que estaba haciendo era:
Set Ejec_1 = CreateObject("C:Documents and SettingsDeathWatchMis documentos ExeActiveX.exe")
en lugar de escribir:
Set Ejec_1 = CreateObject("ExeActiveX2.EXejemplo")
siendo que ya la habia registrado en:
Shell ("C:Documents and SettingsDeathWatchMis documentosExeActiveX.exe /RegServer")
Mira, te escribo todo el rollo que estaba haciendo, hasta que me trabé…
Buscando un tipo multi-threading en VB, me encontre con la siguiente pagina:
todoexpertos.com/categorias/tecnologia-e-internet/programacion/visual-basic/respuestas/168589/se-pueden-ejecutar-consultas-en-paralelo
donde se explica como realizar varias consultas al mismo tiempo.
Ese ejemplo me sirvio para darme una idea de cómo ejecutar varias aplicaciones al mismo.
Entonces realice lo siguiente:
1.- Abri un Proycto Exe ActiveX, con nombre XProyEjec.
En donde mencionas lo de “En proyecto propiedades del proyecto modelo de subprocesos -> activa la casilla que que mejor te convenga”, marco la casilla Subprocesos por objeto.
2.- Cree una clase llamada XClsEjec, con el siguiente codigo:
Public Sub Ejecutor(ValNum As Integer)
Dim frmEjec As XProyEjec.XFrmEjec
Set frmEjec = New XProyEjec.XFrmEjec
Load frmEjec
frmEjec.MultiProcs ValNum
Set frmEjec = Nothing
End Sub
3.- Luego agregue un nuevo proyecto Exe Standard, y genero un formulario, el cual tiene el siguiente codigo:
Private VN As Integer
Public Sub MultiProcs(ValN As Integer)
VN = ValN
End Sub
4.- Y al form, le agregue un Timer, con el siguiente codigo:
Private Sub Timer1_Timer()
MsgBox VN
Unload Me
End Sub
5.- Y genero el archivo XEjecutor.exe
6.- Luego, abro un proyecto Exe Standard independiente. Quito el formulario y agrego un modulo, con el siguiente codigo:
Sub Main()
Shell ("C:Documents and SettingsKyllMis documentosActiveXThreadsXEjecutor.exe /RegServer")
Prueba
End Sub
Y un sub donde tenia el problema.
Aun cuando habia registrado el ActiveX, si escribía
Sub Prueba()
Dim Ejec_1 As New XProyEjec.XClsEjec
Dim Ejec_2 As New XProyEjec.XClsEjec
Set Ejec_1 = New XProyEjec.XClsEjec
Set Ejec_2 = New XProyEjec.XClsEjec
Ejec_1.Ejecutor 1
Ejec_2.Ejecutor 2
Set Ejec_1 = Nothing
Set Ejec_2 = Nothing
End Sub
Recibia Error de compilacion: No se ha definido el tipo definido por el usuario.
Y lo sigo recibiendo. Supongo que si no se hace referencia entrando a Proyecto – Referencias, y agregando el ActiveX, no se puede hacer referencia de la manera que expuse anteriormente.
Y si probaba con:
Sub Prueba()
Dim Ejec_1 As Object
Dim Ejec_2 As Object
Set Ejec_1 = CreateObject("C:Documents and SettingsDeathWatchMis documentosXEjecutor.exe")
Set Ejec_2 = CreateObject("C:Documents and SettingsDeathWatchMis documentosXEjecutor.exe")
Ejec_1.Ejecutor 1
Ejec_2.Ejecutor 2
Set Ejec_1 = Nothing
Set Ejec_2 = Nothing
End Sub
pues recibia el mensaje Error '429' en tiempo de ejecucion : El componente ActiveX no puede crear el objeto.
Asi que como bien dijiste, la solucion fue cambiar el Set para que quedara:
Set Ejec_1 = CreateObject("XProyEjec.XClsEjec")
Ese era todo el rollo.
Si no deje algo en claro, comentamelo, para tratar de exponerlo un poco mejor.
Pues nuevamente, te agradezco mucho tu tiempo y tu ayuda.
Un saludo