KB896559: Самый последний FIX для Common Controls

Полезные статьи и переводы интересных статей
GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

KB896559: Самый последний FIX для Common Controls

Сообщение GSerg » 11.06.2006 (Вс) 8:02

FIX: Windows Common Controls Mscomctl.ocx или Comctl32.ocx могут вызвать непредвиденное завершение работы приложения или среды разработки, либо может быть получено сообщение об ошибке "Деление на ноль"


К сведению
Основная поддержка для Microsoft Visual Basic 6.0 закончилась 31 марта 2005 года. Microsoft выпускает этот не связанный с безопасностью пакет, посколько он содержит улучшения, разработка которых была завершена на момент окончания основной фазы поддержки. Visual Basic 6.0 переведён на дополнительную фазу поддержки, которая продлится до 31 марта 2008 года. Microsoft никоим образом не продлевает основную поддержку Visual Basic 6.0.



СИМПТОМЫ
Существует две версии Microsoft Windows Common Controls. Comctl32.ocx содержит Windows Common Controls 5.0 и распространяется с Microsoft Visual Studio 5.0. Mscomctl.ocx содержит Windows Common Controls 6.0 и включён в Visual Studio 6.0. Этот хотфикс исправляет следующие критические ошибки в этих файлах.

Windows Common Controls 5.0: Comctl32.ocx
В случае следующего хода событий:
  • запущено приложение, устанавливающее хук WinEvent на Microsoft Windows 2000 или более поздней
  • вы запускаете приложение, использующее элемент управления ListView или TreeView из Microsoft Windows Common Controls 5.0
приложение может непредвиденно завершить работу или сгенерировать сообщение об ошибке наподобие:
    Project1: Project1.exe - Application Error
    The instruction at "0x202d0f51" referenced memory at "0x40000001". The memory could not be "written". Click on OK to terminate the program
Примечание Обычно хук WinHook ставят приложения, построенные на Microsoft Active Accessibility. К примеру, Narrator построен на ней. Но и утилиты, работающие под управлением операционной системы Microsoft Windows XP Tablet PC Edition также устанавливают этот хук.


Windows Common Controls 6.0: Mscomctl.ocx
Если запущено приложение, использующее Mscomctl.ocx версии 6.1.97.64 или более позднюю, в этом приложении используется ListView, у которого свойство AllowColumnReorder установлено в True, возникает следующее сообщение об ошибке при попытке изменить порядок столбцов ListView:
    Project1: Project1.exe - Application Error
    The instruction at "0x27618848" referenced memory at "0x016e1e90". The memory could not be "read".
В зависимости от отладчика по умолчанию, установленного в системе, возможно также получение ошибки "0xC0000094 Divide By Zero", или непредвиденное завершение работы приложения.

Примечание При работе из-под IDE перечисленные проблемы так же проявляются.


ПРИЧИНА
Проблема с Windows Common Controls 5.0 возникает потому, что Comctl32.ocx пытается скопировать текст, ассоциированный с элементом ListView, используя маску LVI_IMAGE, при этом указатель на текст равен NULL.

Проблема с Windows Common Controls 6.0 возникает из-за изменений в Mscomctl.ocx версии 6.1.97.64. Версия 6.1.97.64 включена в хотфикс 826287. В ней изменяется поведение элемента управления ListView, когда Visual Studio 6.0 запущена на компьютере с Windows XP или более поздней версией операционной системы. Большинство методов элемента ImageList в Mscomctl.ocx представляют собой обёртки вызовов системного класса ImageList, описанного в Comctl32.dll. Однако для метода ImageList_GetImageRect обёртка не создана. Этот метод по-прежнему использует более раннюю версию структуры ImageList и более раннюю версию класса ImageList, которые определены в файле Mscomctl.ocx. Такой дизайн вызывает ошибку деления на ноль при изменении порядка следования столбцов.


РЕШЕНИЕ
Важно Если используемое приложение было предоставлено третьей стороной, следует связаться с ней до установки фикса (к примеру, если вы не разработали приложение самостоятельно). Если установить фикс без надлежащего тестирования, приложение может перестать функционировать.

Примечание Прилагаемый фикс не предусматривает возможности деинсталлирования после установки.

Следующий файл доступен для загрузки:
http://www.microsoft.com/downloads/deta ... 662F5F62FE


Для получения дополнительной информации о том, как скачивать файлы Microsoft Support, обратитесь к следующей статье в Microsoft Knowledge Base:
119591 How to obtain Microsoft support files from online services

Microsoft проверила этот файл на вирусы с использованием новейшего антивирусного программного обеспечения, доступного на момент опубликования файла. Файл хранится на защищённых серверах, не допускающих несанкционированных изменений содержимого файлов.


СОСТОЯНИЕ
Microsoft подтвержает, что это проблема в продуктах Microsoft, перечисленных ниже в разделе "Применимо к".


ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Для получения дополнительной информации, обратитесь к следующим статьям Microsoft Knowledge Base:
827217 FIX: Access violation в Comctl32.ocx на Windows 2000 и выше
824684 Описание стандартной терминологии, используемой для описания обновлений продукции Microsoft


ПРИМЕНИМО К
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Studio 6.0 Enterprise Edition
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Вернуться в VBStreets Knowledge Base

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList