Очередной баг обнаружен в OS'и от Мелкомягких…

Тема в разделе "WASM.WIN32", создана пользователем Crollspase, 21 дек 2009.

  1. Crollspase

    Crollspase New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    75
    Сразу оговорюсь: если до меня в инете кто-то уже выкладывал информацию по этой теме – просьба запостить линк, ведущий туда, где это было сделано.

    Баг был обнаружен при отладке одной из моих программ, в окне которой используется коммон контрол list view. Бажит сообщение, вызываемое для произвольной сортировки контента контрола - LVM_SORTITEMSEX.

    Краткий ЛикБез по LVM_SORTITEMSEX: при вызове сообщению передаётся произвольное двойное слово, содержащее в себе любую информацию о том, каким образом будет сортироваться содержимое контрола. Так же передаётся адрес функции обратного вызова, код которой обеспечивает реализацию ядра алгоритма сортировочного цикла.

    Краткий ЛикБез по функции обратного вызова: ей передаётся двойное слово, которое было передано при посылке LVM_SORTITEMSEX, и два индекса, обозначающие элементы, которые требуется сравнить в данный момент.

    Баг заключается в том, что при том порядке элементов, который генерирует мой исходник, код ОС'и никогда не передаёт индексы элементов с метками «5555” и «2222” функции обратного вызова для сравнения. Для удобства, я сделал код создающий и отображающий сообщение о том, элементы с какими метками сравниваются в данный момент. Сортировка элементов идёт по возростанию и начинается при щелчке по хедеру листа. Прога тестировалась на WinXPx86_SP3, WinVistax64_SP1 и на Win7x64.
     
  2. bendme

    bendme New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    179
    Вкури алгоритмы сортировки.
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Crollspase

    Для того чтобы отсортировать список, не обязательно сравнивать каждый элемент с каждым. Покажи тело колбека.
     
  4. Crollspase

    Crollspase New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    75
    Crollspase:
    _DEN_:
    Что-то меня глюконуло, когда пост писал… Поправка: “5555” вообще ни с чем кроме «1111” не сравнивается.

    _DEN_:
    SortingListViewCycleCore. Я'ж там чуть ли не каждую функцию прокомментировал… В конце концов, можно забить в поиск "LVM_SORTITEMSEX", и сразу прояснится, какая функция является callback'ом для сообщения.