2009-06-19 35 views
6

Tengo una aplicación VB6 antigua que utiliza un control ImageList de COMCTL32.OCX ("Controles comunes de Microsoft Windows 5.0 (SP2)") para proporcionar iconos para TreeViews y ListViews .Utilizar ImageList desde la aplicación VB6 provoca un bloqueo en Windows 7.0 64-bit

La aplicación ni siquiera se ejecutará en Windows 7.0 de 64 bits. En el momento en que intenta cargar el formulario que tiene ImageList, se bloquea (bueno, en realidad, la aplicación se apaga y sale sin dejar rastro).

Al eliminar ImageList del formulario se resuelve el problema.

¿Alguna idea?

+1

No tengo idea, excepto informarlo a Microsoft. En segundo lugar, tal vez se reduzca un poco al probar trabajos de imagen única. –

Respuesta

8

I resuelto este problema mediante la sustitución de todas las instancias de COMCTL32.OCX, que vino con VB5, con MSCOMCTL.OCX, que vino con VB6.

El artículo 190952 de Microsoft KB tiene instrucciones para hacer esto. Era prácticamente una operación de búsqueda y reemplazo global.

1

Es posible que tenga un problema con Data Execution Protection (DEP). Pruébelo deshabilitando DEP:

bcdedit.exe /set {current} nx AlwaysOff 

Reinicie después de ingresar lo anterior en una línea de comando. Recuerde volver a encenderlo ya que es el equivalente a ejecutar Windows con los pantalones bajados.

Editar: El comando anterior funciona en Vista. No lo he probado en Windows 7.

+0

+1 Sí parece el DEP clásico, definitivamente el primer puerto de escala. – AnthonyWJones

1

Un ajuste de DEP menos drástico es entrar en el cuadro de diálogo de rendimiento de computadoras (pestaña avanzada de propiedades del sistema) y agregar el exe de aplicaciones a la lista de excepciones en la pestaña DEP.

BTW, estás seguro de que esto no pertenece a serverfault.com. : P

2

Notificar un error a Microsoft. El tiempo de ejecución VB6 es still supported en 64-bit Windows 7. COMCTL32.OCX no se instala con Windows 7, pero es explicitly listed como soportado en Windows 7.

2

Su solución está bien. Pero COMCTL32.OCX debería funcionar bien en Win64 de todos modos (Vista o 7).

Sólo un pequeño consejo:

Si se utiliza MSCOMCTL.OCX usted no será capaz de aplicar a la vista de lista o vista de árbol al estilo XP/Vista/7 y su aplicación puede tener un aspecto extraño. Manifiesto no tendrá ningún efecto en los controles MSCOMCTL.OCX.

Una solución alternativa sería subclasificar los controles MSCOMCTL.OCX, y dado que todavía contienen un encabezado COMCTL32.DLL, podría manipular cómo pinta.

(Lo habría publicado como comentario, pero todavía no puedo)

Cuestiones relacionadas