Использование ImageList из приложения VB6 вызывает сбой в Windows 7.0 64-bit
Вопрос
У меня есть старое приложение VB6, которое использует элемент управления ImageList из COMCTL32.OCX (" Microsoft Windows Common Controls 5.0 (SP2) ") для предоставления значков для TreeViews и ListViews.
Приложение даже не запустится в 64-битной Windows 7.0. В ту минуту, когда он пытается загрузить форму, на которой есть ImageList, он вылетает (ну, на самом деле, приложение подмигивает, выходя без следа).
Удаление ImageList из формы решает проблему.
Есть идеи?
Решение
Я решил эту проблему, заменив все экземпляры COMCTL32.OCX, которые поставлялись с VB5, на MSCOMCTL.OCX, который шел с VB6.
В статье Microsoft KB 190952 есть инструкции для этого. Это была просто операция глобального поиска и замены.
Другие советы
Сообщить об ошибке в Microsoft. Среда выполнения VB6 по-прежнему поддерживается в 64-разрядной Windows 7. COMCTL32 .ocx не устанавливается с Windows 7, но он явно указан в списке как поддерживается в Windows 7.
Ваше решение в порядке. Но COMCTL32.OCX должен работать на Win64 в любом случае (Vista или 7).
Просто маленький совет:
Если вы используете MSCOMCTL.OCX, вы не сможете применить к своему списку или древовидной структуре стиль XP / Vista / 7, и ваше приложение может выглядеть чуждым. Манифест не повлияет на элементы управления MSCOMCTL.OCX.
Обходным решением будет создание подкласса элементов управления MSCOMCTL.OCX, и, поскольку они по-прежнему содержат заголовок COMCTL32.DLL, вы можете манипулировать тем, как он рисует.
(я бы написал как комментарий, но все еще не могу)
Возможно, у вас возникла проблема с защитой выполнения данных (DEP). Проверьте это, отключив DEP:
bcdedit.exe /set {current} nx AlwaysOff
Перезагрузитесь после ввода вышеуказанного в командной строке. Не забудьте включить его снова, поскольку это эквивалентно запуску Windows с опущенными штанами.
Редактировать: приведенная выше команда работает в Vista. Я не пробовал это на Windows 7.
Менее радикальная настройка DEP - это перейти в диалоговое окно производительности компьютера (расширенная вкладка системных свойств) и добавить exe-приложения в список исключений на вкладке DEP.
Кстати, вы уверены, что это не относится к serverfault.com. : P р>