Autor Tema: ActiveX component can't create object  (Leído 25552 veces)

0 Usuarios y 1 Visitante están viendo este tema.

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
ActiveX component can't create object
« en: Julio 08, 2013, 02:24:10 pm »
Buenas, hoy me tope con el clasico Run-time error '429':  ActiveX component can't create object el error que se genera al intentar instaciar un objeto no registrado. Es bastante molesto cuando no se tienen los fuentes a mano porque es imposible determinar que objeto es el que esta dando problemas. Como esto es un problema bastante comun en nuestro trabajo decidi buscar una manera de depurar el ejecutable y determinar de manera rapida que objeto es el que da problemas. Si alguien esta interesado puedo postear un instructivo de como hacerlo, es rapido y simple.

Saludos

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:ActiveX component can't create object
« Respuesta #1 en: Julio 08, 2013, 02:48:08 pm »
Estaria muy bueno, es remolesto, como comentas, cuando no tenes el fuente a mano, y no tenes ni idea por donde puede venir

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:ActiveX component can't create object
« Respuesta #2 en: Julio 08, 2013, 04:48:43 pm »
Adjunto el PDF con un instructivo, es medio rustico pero creo que se entiende.

https://dl.dropboxusercontent.com/u/43394978/Como%20detectar%20este%20problemita%20ActiveX%20component%20can.pdf

Una aclaracion, si estan en un sistema de 64 bits, descarguen el instalador de 64 y van a ver que hay 2 Api Monitor, uno de 32 y uno de 64, nosotros usamos el de 32 para vb.
« última modificación: Julio 08, 2013, 05:30:45 pm por cobein »

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:ActiveX component can't create object
« Respuesta #3 en: Julio 08, 2013, 05:22:51 pm »
muy bueno, muy clarito, a probarlo...

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:ActiveX component can't create object
« Respuesta #4 en: Julio 29, 2013, 01:56:54 am »
Sale hacer un "Patch" para que el programa botonee cual es el ActiveX que realmente falta en vez de mostrar eso?
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:ActiveX component can't create object
« Respuesta #5 en: Julio 29, 2013, 03:46:53 am »
Listorti!



descargar ActiveX Patch

Lo que hace esto, es sencillamente hookear las apis en cuestion. Para eso hay que llamar al mActiveXPatch.StartHook() antes de usar cualquier objeto COM.
Lo que cobein menciono en su tutorial, es para objetos creados dinamicamente con CreateObject().
Pero tambien esta el caso de cuando se usa Dim obj As New dummyClass; acá el API que tira error es otra (CoCreateInstanceEx).

En el .zip que adjunte, se hookean ambas (incluye deteccion si corre en IDE o no), y cuando aparece un error, simplemente aparece un error "mas informativo" al respecto.
Ademas, hay un ejemplo en el cual se puede hacer crashear el .exe de las 2 formas (tanto con CreateObject o con CoCreateInstanceEx).


PD: Si se usa On Error ..., el Msgbox aparece de igual forma, pero el error sigue siendo atrapado de igual manera por VB (es decir, no cambia en nada, simplemente te avisa que hubo un error al cargar, pero nada mas)
« última modificación: Julio 29, 2013, 03:56:26 am por coco »
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:ActiveX component can't create object
« Respuesta #6 en: Julio 29, 2013, 09:21:44 am »
Jejeje ahora hay que inyectarlo, el tema es que mayormente te pasa esto cuando no tenes source a mano y tenes que hacer magia para que el exe funcione, el proximo paso es hacer un libreria e inyectarla en el exe, como mencionabas en el chat! :D

Amadeo

  • Bit
  • Mensajes: 1
  • Reputación: +0/-0
    • Ver Perfil
Re:ActiveX component can't create object
« Respuesta #7 en: Junio 03, 2014, 07:32:05 am »
Hola Leandro,

Soy Amadeo, de España. Cuando ejecuto una aplicación concreta me sale el famosos error Active X error 429.

He seguido las instrucciones que has puesto en este enlace:
https://dl.dropboxusercontent.com/u/43394978/Como%20detectar%20este%20problemita%20ActiveX%20component%20can.pdf

Pero no sé solucionar el problema porque, según tu explicas en ese documento, siguiendo esos pasos podemos saber qué archivo está dando el error. Pero una vez localizado el archivo, ¿qué hacemos con él?.

En mi caso el error que he identificado usando el programa Monitoring API es el siguiente:

1-IDE:1652 (Seletek.exe+0x1BB8)

Ese error aparece con un cuadro pequeño de color rojo encima. ¿Qué hago con ese error? ¿lo borro?¿Cómo lo borro?.

Gracias por la ayuda.

Un saludo desde España.

Amadeo

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:ActiveX component can't create object
« Respuesta #8 en: Junio 03, 2014, 01:12:01 pm »
Proba con el proyecto que subi aca http://leandroascierto.com/foro/index.php?topic=2281.0
Eso te va a devolver el clsid o el nombre del objeto.
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

Spyd

  • Bit
  • Mensajes: 1
  • Reputación: +0/-0
    • Ver Perfil
Re:ActiveX component can't create object
« Respuesta #9 en: Julio 19, 2016, 03:12:59 pm »
Siento resucitar este hilo, pero mi problema es exactamente éste, y sólo he conseguido solucionarlo parcialmente gracias a este hilo.

La cuestión es que ahora me encargo de un proyecto hecho en VB6 y del que no puedo ponerme en contacto con sus programadores anteriores.

El programa funciona, y he hecho las modificaciones que me han solicitado; además si en un ordenador en el que el programa ya funcionaba le sustituyo el ejecutable, funciona correctamente.

El problema es que tengo que hacer un instalador para ordenadores que no han tenido nunca el programa instalado, y aquí es donde empieza mi pesadilla, ya que llevo varios días enteros intentando conseguir que un ordenador con un Windows 7 SP1 limpio (recién instalado) pueda ejecutar la aplicación.

Lo primero que he hecho ha sido mirar las referencias y componentes del proyecto para copiar los archivos correspondientes desde el equipo de desarrollo hacia el ordenador nuevo, he copiado los archivos a sus carpetas correspondientes (SysWow64) y he registrado con regsvr32 todos los archivos que era necesario registrar.

El problema es que cuando se ejecuta la aplicación, según que formularios abres, te aparece el RTE 429 y estoy bastante seguro que he copiado todos los componentes.
También he intentado con el código mActiveXPatch de Coco para mostrar un error más descriptivo, y también la aplicación AXInjector del otro hilo para ejecutar la aplicación sin necesidad de añadir el código.

En ambos casos me ha funcionado para un componente que había olvidado, pero aparte de algunos mensajes de error que no detienen la aplicación del tipo "No todas las interfaces solicitadas estaban disponibles (0x80012)" los últimos errores que estoy teniendo de RTE 429 no muestran ningún error descriptivo adicional ni en el caso del mActiveXPatch ni del AXInjector.

Estoy desesperado y ya no se que más probar. ¿Alguien me puede echar una mano?

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:ActiveX component can't create object
« Respuesta #10 en: Julio 20, 2016, 11:19:32 am »
Si dice que no todas las interfaces están disponibles, seguramente hay algún componente ActiveX, que es otra versión, a la que espera tu ejecutable