L'utilisation d'ImageList à partir d'une application VB6 provoque le blocage de Windows 7.0 64 bits

StackOverflow https://stackoverflow.com/questions/1018942

Question

Je possède une ancienne application VB6 qui utilise un contrôle ImageList de COMCTL32.OCX ("Microsoft Windows Common Controls 5.0 (SP2)") pour fournir des icônes pour TreeViews et ListViews.

L'application ne se lancera même pas sous Windows 7.0 64 bits. À la minute où il essaie de charger le formulaire sur lequel figure la liste ImageList, il se bloque (eh bien, en fait, l'application clignote et sort sans laisser de trace).

La suppression de ImageList du formulaire résout le problème.

Des idées?

Était-ce utile?

La solution

J'ai résolu ce problème en remplaçant toutes les instances de COMCTL32.OCX, fourni avec VB5, par MSCOMCTL.OCX, fourni avec VB6.

L'article 190952 de la base de connaissances Microsoft contient des instructions permettant d'effectuer cette opération. Il s’agissait plutôt d’une opération globale de recherche et de remplacement.

Autres conseils

Signalez un bogue à Microsoft. Le moteur d’exécution VB6 est toujours pris en charge sous Windows 7 64 bits. COMCTL32 .ocx n’est pas installé avec Windows 7, mais il est explicitement répertorié tel que supporté sous Windows 7.

Votre solution est OK. Mais COMCTL32.OCX devrait quand même fonctionner correctement sous Win64 (Vista ou 7).

Juste un petit conseil:

Si vous utilisez MSCOMCTL.OCX, vous ne pourrez pas appliquer le style XP / Vista / 7 à votre listview ni à votre arborescence et votre application pourrait sembler étrangère. Le manifeste n'aura aucun effet sur les contrôles MSCOMCTL.OCX.

Une solution de contournement consisterait à sous-classer les contrôles MSCOMCTL.OCX. Comme ils contiennent toujours un en-tête COMCTL32.DLL, vous pouvez manipuler la manière dont il est peint.

(J'aurais posté comme commentaire, mais je ne peux toujours pas)

Il est possible que vous rencontriez un problème avec la protection d'exécution de données (DEP). Testez-le en désactivant la PED:

bcdedit.exe /set {current} nx AlwaysOff

Redémarrez après avoir entré ce qui précède dans une ligne de commande. N'oubliez pas de le réactiver car cela équivaut à exécuter Windows avec votre pantalon baissé.

Modifier: La commande ci-dessus fonctionne sur Vista. Je ne l'ai pas essayé sous Windows 7.

Un ajustement moins radical de la prévention DEP consiste à ouvrir la boîte de dialogue des performances de l'ordinateur (onglet Propriétés avancées du système) et à ajouter le fichier exe de l'application à la liste des exceptions figurant dans l'onglet DEP.

BTW, êtes-vous sûr que cela n'appartient pas à serverfault.com. : P

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top