Cómo solucionar problemas de control ActiveX se bloquea en Internet Explorer

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): 247845
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Resumen
En ocasiones cuando se utiliza un control ActiveX (en cualquiera desarrollado para usted o un control de terceros) dentro de una página HTML, Internet Explorer sufre un General Protection error (GPF), ambos midway a través de la ejecución o mientras se está apagando el explorador. Hay varios problemas conocidos que pueden ocasionar esto ocurra:
  • El control es el único subproceso.
  • El control aloja muchos otros anidados controles, cada uno con su propia ventana (hWnd) (Windows 95 y Windows 98 sólo).
  • El control es no limpiar los recursos correctamente.
Más información

El control es el único subproceso

A partir de la versión 4.0, Internet Explorer requiere que todos los controles ActiveX que aloja subprocesamiento controlado. Subprocesamiento es un concepto desde COM; significa que cada control existe dentro de su propio contexto de ejecución protegido o apartamento. Internet Explorer requiere controles para utilizar al menos un apartamento de un único subproceso (STA), en que todos los subprocesos excepto el control crear subproceso puede acceso al control registrando los mensajes. Emisoras fácil agregar concurrencia al control ActiveX con poca sobrecarga mediante programación.

No-subprocesamiento controles exhibir comportamiento desigual entre diferentes instancias de Internet Explorer. En algunos equipos, el control puede parecer que funcionan correctamente; en otros, su rendimiento disminuye a un rastreo; y en otros, se bloquea.

Para comprobar o no un control es de subprocesamiento de apartamento, consulte la entrada de registro para el control y busque el valor de ThreadingModel debajo de la clave InprocServer32:
HKEY_CLASSES_ROOT\CLSID\{Your Control's CLSID}\InprocServer32\ThreadingModel					
Este valor debe establecerse como igual a controlado .

Si no se establece ThreadingModel, el control es un único subproceso. Por fortuna, convertir su control personalizado a subprocesamiento es un cambio sencillo. Consulte el tema "modelo de apartamento de subprocesos" en MSDN Library para obtener más información. Si está utilizando un componente de terceros, simplemente no puede cambiar esta configuración de registro y esperar para que funcione el control; debe obtener una nueva versión del control de su proveedor de componente.
Para obtener más información en modelos de subprocesamiento de COM, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
150777INFO: Descripción y funcionamiento de modelos de subprocesamiento de OLE

El control aloja muchos otros controles anidados

Herramientas como Visual Basic que sea fácil crear complejo ActiveX controles que contienen otros controles de varios niveles de incrustación. No es raro ver un desarrollador crear un UserControl de Visual Basic con docenas de controles constituyentes y una jerarquía de incrustación de siete u ocho niveles. Sin embargo, esos controles aparecerán realizar peor en sistemas Windows 95 y Windows 98 como pasa el tiempo, generalmente lo que el explorador se bloquee después de aproximadamente 30 minutos hasta una hora de uso dedicado.

En este caso, el control está usando demasiados recursos del sistema, especialmente los identificadores de ventana. Windows 95 y Windows 98 tienen una cantidad limitada de espacio para los identificadores de ventana que se almacenan en un montón de la biblioteca USER32. Tamaño del montón este es dinámico en Windows NT, pero limitado a 32 K por proceso en Windows 95 y 98. Identificadores de ventana excesiva, combinados con un error al limpiar correctamente los recursos de control (vea más adelante), puede agotar rápidamente límite de identificador de ventana de Internet Explorer.
Una forma rápida de solucionar este problema es que los controles sin ventanas. Los controles sin ventana ahorrar tiempo y recursos por forsaking posesión de un identificador de ventana; en este caso, el contenedor del control controla la transferencia de mensajes para el control a través de un conjunto de interfaces OLE. Crear controles sin ventanas en Visual Basic y C++ marcos como Active Template Library (ATL), es muy sencillo. Consulte "Controles sin ventana" en MSDN Library para obtener más información. Para obtener más información acerca de la arquitectura de controles sin ventanas, y qué deben hacer contenedores para ellos, vea la especificación 96 controles OLE.

Los desarrolladores también deben reevaluar diseño del control en su en este momento. Tales controles mammoth son difíciles de mantener y depurar, y los desarrolladores mejor dividiendo estos controles gigante en varios controles independientes la.

El control es no limpiar los recursos correctamente

Más utiliza los componentes complejos (componentes que contienen otros componentes de n ), es más probable los para crear referencias circulares. Una referencia circular se produce cuando el Control A contiene el Control B y Control B también tiene una referencia al Control A (digamos, a través de una propiedad Parent). En este caso, no se destruye el objeto y, por lo tanto, nunca se descarga la DLL que contiene el control. Continuará consumir más memoria de sistema operativo, posiblemente desestabilizar todo el equipo.

Este es otro argumento atractiva para mantener el diseño de los controles planos y simple. En un control con más de cuatro niveles de contención, las referencias circulares son difíciles de localizar, requerir toneladas de instrumentación de manuales de código y la depuración a través de varios días. Si es posible dividir el control, formular una estrategia de pruebas rigurosa y comprobar la seguridad de cada componente complejo--empezando con los controles más sencillas y continuando hasta--antes de generar en la parte superior de ellos.

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 247845 - Última revisión: 12/05/2015 17:45:54 - Revisión: 2.3

Microsoft Internet Explorer 4.01 Service Pack 2, Microsoft Internet Explorer 5.0, Microsoft Internet Explorer 5.5, Microsoft Internet Explorer 6.0

  • kbnosurvey kbarchive kbmt kbhowto KB247845 KbMtes
Comentarios