Domanda

Ho una vecchia applicazione VB6 che utilizza un controllo ImageList di COMCTL32.OCX ("quotazioni comuni di Microsoft Windows 5.0 (SP2)" per fornire icone per TreeViews e ListViews.

L'app non si avvia nemmeno su Windows 7.0 a 64 bit. Nel momento in cui tenta di caricare il modulo su cui è presente ImageList, si arresta in modo anomalo (beh, in realtà, l'app si annulla, uscendo senza lasciare traccia).

La rimozione di ImageList dal modulo risolve il problema.

Qualche idea?

È stato utile?

Soluzione

Ho risolto questo problema sostituendo tutte le istanze di COMCTL32.OCX, fornito con VB5, con MSCOMCTL.OCX, fornito con VB6.

L'articolo di Microsoft KB 190952 contiene istruzioni per farlo. Era praticamente solo un'operazione di ricerca e sostituzione globale.

Altri suggerimenti

Segnala un bug a Microsoft. Il runtime VB6 è ancora supportato su Windows 7. COMCTL32 a 64 bit .ocx non è installato con Windows 7, ma è elencato esplicitamente come supportato su Windows 7.

La tua soluzione è OK. COMCTL32.OCX dovrebbe comunque funzionare bene su Win64 (Vista o 7).

Solo un piccolo consiglio:

Se si utilizza MSCOMCTL.OCX, non sarà possibile applicare alla visualizzazione elenco o alla visualizzazione ad tre lo stile XP / Vista / 7 e l'app potrebbe apparire aliena. Manifest non avrà alcun effetto sui controlli MSCOMCTL.OCX.

Una soluzione alternativa sarebbe quella di sottoclassare i controlli MSCOMCTL.OCX e poiché contengono ancora un'intestazione COMCTL32.DLL è possibile manipolare il modo in cui dipinge.

(Avrei pubblicato come commento, ma ancora non riesco)

È possibile che tu stia riscontrando un problema con Data Execution Protection (DEP). Provalo disabilitando DEP:

bcdedit.exe /set {current} nx AlwaysOff

Riavvia dopo aver inserito quanto sopra in una riga di comando. Ricorda di riaccenderlo poiché equivale a eseguire Windows con i pantaloni abbassati.

Modifica: il comando sopra funziona su Vista. Non l'ho provato su Windows 7.

Una modifica DEP meno drastica è andare nella finestra di dialogo delle prestazioni del computer (scheda avanzata delle proprietà del sistema) e aggiungere le app exe all'elenco delle eccezioni nella scheda DEP.

A proposito, sei sicuro che questo non appartenga a serverfault.com. : P

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top