Использование ImageList из приложения VB6 вызывает сбой в Windows 7.0 64-bit - PullRequest
6 голосов
/ 19 июня 2009

У меня есть старое приложение VB6, которое использует элемент управления ImageList из COMCTL32.OCX («Microsoft Windows Common Controls 5.0 (SP2)») для предоставления значков для TreeViews и ListViews.

Приложение даже не запустится в 64-битной Windows 7.0. В ту минуту, когда он пытается загрузить форму, на которой есть ImageList, он вылетает (ну, на самом деле, приложение подмигивает, выходя без следа).

Удаление ImageList из формы решает проблему.

Есть идеи?

Ответы [ 5 ]

9 голосов
/ 19 июня 2009

Я решил эту проблему, заменив все экземпляры COMCTL32.OCX, который шел с VB5, на MSCOMCTL.OCX, который шел с VB6.

В статье Microsoft KB 190952 есть инструкции для этого. Это была просто операция глобального поиска и замены.

2 голосов
/ 21 февраля 2010

Ваше решение в порядке. Но COMCTL32.OCX должен работать на Win64 в любом случае (Vista или 7).

Просто маленький совет:

Если вы используете MSCOMCTL.OCX, вы не сможете применить к списку или древовидной структуре стиль XP / Vista / 7, и ваше приложение может выглядеть чуждым. Манифест не повлияет на элементы управления MSCOMCTL.OCX.

Обходной путь может заключаться в создании подкласса элементов управления MSCOMCTL.OCX, и, поскольку они по-прежнему содержат заголовок COMCTL32.DLL, вы можете манипулировать способом его рисования.

(я бы написал как комментарий, но все равно не могу)

2 голосов
/ 19 июня 2009

Сообщить об ошибке в Microsoft. Среда выполнения VB6 по-прежнему поддерживается в 64-разрядной Windows 7. COMCTL32.ocx не устанавливается в Windows 7, но он явно указан , как поддерживается в Windows 7.

1 голос
/ 19 июня 2009

Менее радикальная настройка DEP - это перейти в диалоговое окно производительности компьютера (расширенная вкладка системных свойств) и добавить exe приложения в список исключений на вкладке DEP.

Кстати, вы уверены, что это не относится к serverfault.com. : P

1 голос
/ 19 июня 2009

Возможно, у вас возникла проблема с защитой выполнения данных (DEP). Проверьте это, отключив DEP:

bcdedit.exe /set {current} nx AlwaysOff

Перезагрузитесь после ввода вышеуказанного в командной строке. Не забудьте включить его снова, поскольку это эквивалентно запуску Windows с опущенными штанами.

Редактировать: команда выше работает на Vista. Я не пробовал это в Windows 7.

...