Recibe un mensaje de error "System Error &H80004005" de una aplicación de Visual Basic 6.0, cuando un subclases de control de ActiveX de MFC cualquiera de las clases de ventana implementado por Comctl32.dll

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

En esta página

Síntomas

Un control ActiveX de MFC controlar que subclasifique cualquiera de las clases de ventana implementada por causas de Comctl32.dll el siguiente error se inicia desde un archivo .exe de Visual Basic 6.0.
"Sistema error & H80004005 (-2147467259). Error no especificado"
La versión de depuración del control ActiveX produce una aserción ASSERT en archivo Ctlcore.cpp al final de COleControl::CreateControlWindow, en o cerca de la línea 662.

Este problema se produce sólo cuando generar un archivo .exe desde Visual Basic 6.0 y ejecutarlo desde fuera del entorno de desarrollo Visual Basic.

Causa

Archivos ejecutables de Microsoft Visual Basic no inicializan la biblioteca de control comunes (Comctl32.dll) de forma predeterminada, lo que el CreateEx llamada produciendo errores de COleControl::CreateControlWindow. Llamar a GetLastError() proporciona 0x0000057F - no se puede encontrar la clase de ventana, que indica la biblioteca de control comunes debe inicializarse explícitamente.

Solución

Dentro de la función InitInstance del control ActiveX, realizar una llamada a:
InitCommonControls(void)
o
InitCommonControlsEx(LPINITCOMMONCONTROLSEX lpInitCtrls)
Esto garantiza que Comctl32.dll es cargado y inicializado, independientemente del contenedor se ejecuta el control.

En lugar de llamar a InitCommonControls desde el código del control, también puede llamarlo directamente desde la aplicación de cliente de Visual Basic:
  • Incluye una declaración general para el formulario correspondiente; por ejemplo:
    Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
  • Agregue una llamada a:
    InitCommonControls
    					
    en el método Form_Load.
En algunas situaciones, esto puede ser demasiado tarde inicializar la biblioteca de controles comunes. Por lo tanto, se recomienda agregar esta llamada en la función InitInstance del control.

Estado

Este comportamiento es por diseño.

Más información

Pasos para reproducir este comportamiento

  1. Con Visual C++, el Asistente de control ActiveX de MFC, crear un control predeterminado.
  2. En la sección de configuración de control de AppWizard (paso 2 del Asistente para aplicaciones de Visual C++ 6.0), la clase de ventana para la subclase, elija uno de los siguientes: msctls_hotkey32, msctls_progress32, SysTabControl32 msctls_statusbar32, msctls_trackbar32, msctls_updown32, SysAnimate32, SysHeader32, SysListView32, o SysTreeView32.
  3. Genere el control.
  4. Abra Microsoft Visual Basic 6.0 y cree un nuevo proyecto EXE estándar.
  5. En el menú proyecto , haga clic en componentes y seleccione el control que acaba de crear mediante Microsoft Visual C++.
  6. Seleccione este control y que dibuje en el formulario de ventana.
  7. En el menú archivo , haga clic en Crear Project.exe y generar el archivo exe.
  8. Vaya al explorador de Windows y ejecute este archivo ejecutable.

Propiedades

Id. de artículo: 223152 - Última revisión: martes, 21 de noviembre de 2006 - Versión: 3.1
La información de este artículo se refiere a:
  • Microsoft Foundation Class Library 4.2 sobre las siguientes plataformas
    • Microsoft Visual C++ 5.0 Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual Basic 5.0 Learning Edition
    • Microsoft Visual Basic 6.0 Edición de aprendizaje
    • Microsoft Visual Basic 5.0 Professional Edition
    • Microsoft Visual Basic 6.0 Professional Edition
    • Microsoft Visual Basic 5.0 Enterprise Edition
    • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palabras clave: 
kbmt kberrmsg kbtshoot kbcmnctrls kbctrl kbprb KB223152 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 223152

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