PRB: Error 430 en tiempo de ejecución en el cliente después de cambiar el tipo de servidor

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

En esta página

Síntomas

Cuando el tipo de proyecto de un servidor ActiveX se cambia de DLL a EXE y vuelve a compilarse, cualquier código de cliente que intente crear una instancia de un objeto a partir del servidor genera el error siguiente:
"Error en tiempo de ejecución '430': Esta clase no admite automatización o no admite
la interfaz esperada."

Causa

El error es el resultado de la compatibilidad del proyecto y el cambio del tipo de proyecto de DLL a EXE. En la compatibilidad del proyecto, Visual Basic conserva el identificador de clase (CLSID) de la clase pero no el identificador de interfaz (IID). Dado que se conserva el CLSID, la clase termina registrándose en dos servidores: el servidor en proceso (DLL) y el servidor local (EXE). Cuando crea una instancia de la clase a partir de un cliente, se elige la clase de la DLL. Dado que la clase de la DLL no admite el nuevo IID, se produce el error anterior.

Solución

Para eliminar este error, use la utilidad RegSvr32.EXE para eliminar del Registro el servidor de DLL anterior y volver a incluir en el Registro el nuevo servidor EXE.

Estado

Microsoft está investigando este problema y publicará nueva información aquí, en Microsoft Knowledge Base, cuando esté disponible.

Más información

Pasos para reproducir este comportamiento

  1. Crear un nuevo proyecto de DLL de ActiveX en Visual Basic. Se creará Class1 de manera predeterminada.
  2. Seleccione Project1 en el Explorador de proyectos y presione la tecla F4 para que aparezca la ventana Propiedades. En la ventana Propiedades, cambie el valor de (Nombre) a "Server".
  3. Pegue el código siguiente en Class1:
          Public Test As Collection
     
    						
  4. Compile la DLL seleccionando Generar Server.dll en el menú Archivo.
  5. Inicie otra instancia de Visual Basic y cree un nuevo proyecto EXE estándar. De forma predeterminada, se crea Form1.
  6. Seleccione Referencias en el menú Proyecto y realice una referencia a Server.
  7. Pegue el código siguiente en Form1:
          Private Sub Form_Load()
             Dim x as Server.Class1
             set x = new Server.Class1
          End Sub
    
    						
  8. Presione la tecla F5 para ejecutar el proyecto. No se genera ningún error.
  9. Vuelva al proyecto Server. Seleccione Propiedades de Server en el menú Proyecto. Seleccione la ficha General y cambie el tipo de proyecto a EXE de ActiveX.
  10. Vuelva a compilar el proyecto seleccionando Server.EXE en el menú Archivo.
  11. Vuelva a la instancia del cliente de Visual Basic. Seleccione Referencias en el menú Proyecto. Quitar la referencia a Server.dll y comprobar Server.EXE
  12. Presione la tecla F5 para ejecutar el proyecto y observe que se produce el error siguiente:
    "Error en tiempo de ejecución '430': Esta clase no admite automatización o no admite
    la interfaz esperada."

Propiedades

Id. de artículo: 193172 - Última revisión: jueves, 27 de diciembre de 2007 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft Visual Basic 6.0 Edición de aprendizaje
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 6.0 Edición empresarial
Palabras clave: 
kbprb KB193172

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