Использование ImageList из приложения VB6 вызывает сбой в Windows 7.0 64-bit

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

Вопрос

У меня есть старое приложение 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top