Конференция "KOL" » Мозговой штурм
 
  • MTsv DN (07.04.09 10:47) [0]
    Всем привет...

    Нужен "мозговой штурм". Приветствуются ВСЕ предположения...даже бредовые 8)

    Исходные данные:
    1. Есть проект. Создавался универсальным для использования UNICODE_CTRLS и его отсутствия... Интересует второе.
    2. На виртуалке винда 98. Отключаю UNICODE_CTRLS. Убираю все что привязано к ntdll.dll. Компилю. Ошибок 0.
    3. Если запущена IDE, то запуск приложения из ОС происходит без сбоев, работа 100% нормальная.
    4. Закрываю IDE. Попытка первого запуска приложения вылет пустого MsgOK с заголовком "Error..." и никаких системных ошибочных окон.
    5. Второй запуск приложения. Сплеш-окно отрабатывает и завис приложения.
    6. Замена системных файлов не используется.

    Итог (мои предположения):
    1. Для Главной Формы где-то срабатывает OnMessage, которое "обламывается" на какой-то обработке (или любое другое событие).
    2. В OnMessage неверно возвращается значение Result или Rslt (или любое другое событие).
    3. Использование сторонних компонентов, типа SATabs, mdvTreeListEdit и прочих (вряд ли, т.к. уже пробовал от всех избавиться, результат тот же)

    У кого какие идеи???
  • MTsv DN (07.04.09 14:24) [1]
    > 1. Для Главной Формы где-то срабатывает OnMessage, которое "обламывается" на какой-то обработке (или любое другое событие).
    > 2. В OnMessage неверно возвращается значение Result или Rslt (или любое другое событие).

    Не то... Отключение OnMessage и OnCreate эффекта не дало. Я все-таки убежден, что в каком-то событии вылет, но в каком? И главный вопрос: почему при запущенной IDE из ОС прога нормально запускается???
  • MTsv DN (07.04.09 20:20) [2]
    Мда... "Штурма" смотрю не получилось...ну, да, ладно.

    В чем ошибка, я нашел...однако ГДЕ нет, надеюсь, что пока...

    Прикладываю минимальный проект. Ничего сверхъестественного, просто ToolBar на форме, без кнопок, без туллтипов...вообще без ничего:
    http://ifolder.ru/11479490

    Условия:
    1. ОС: Windows 98 + IE 6.0 + Все хотфиксы для ОС и IE + DirectX 9.0 (в общем, все что можно выжать из 98 винды, я выжал)
    2. IDE Delphi (в моем случае, Delphi 7) + KOL 2.88
    3. Директивы условной компиляции: KOL_MCK

    Проявление бага:
    ТОЛЬКО ПРИ ЗАКРЫТОЙ IDE. Вылет системного окна ошибки (все регистры обнулены), затем окно "Error" с кодом "Runtime error 202 at XXXXXXXX", полный завис системы (только кнопка ресет)...

    Где:
    Вылет при вызове SetAlign( caTop ); Как при использовании OLD_ALIGN, так и при использовании NEW_ALIGN.

    Пока все.
    Вопросы:
    1. Почему только при закрытой IDE?
    Я понимаю, например, при отладке в IDE бага нет, а при запуске из ОС появляется. Типа дельфи управляет памятью не так как OC...тили-тили, трали-вали...это еще можно как-то понять. Но тут-то, тупо загружена IDE и в нем открыт проект.
    2. Как вообще такие баги тестировать?
    3. Ну, и соответственно: Где ошибка в данном случае?

    З.Ы. Убедительная просьба. НЕ НАДО ВОПРОСОВ ТИПА: "НА КОЙ СДАЛАСЬ WINDOWS 98?"
  • MTsv DN (07.04.09 20:22) [3]
    В дополнение:
    Runtime error 202 = Stack Overflow

    Видимо, где-то зацикливает в бесконечность...
  • MTsv DN (07.04.09 22:38) [4]
    > В чем ошибка, я нашел...однако ГДЕ нет, надеюсь, что пока...
    Нашел где циклит.
    procedure TControl.SetBoundsRect( const Value: TRect );
    var Rect: TRect;
    begin
    ...
      if fHandle <> 0 then
      begin
        SetWindowPos( fHandle, 0, Rect.Left, Rect.Top, Rect.Right - Rect.Left,
                      Rect.Bottom - Rect.Top, SWP_NOZORDER or SWP_NOACTIVATE );
      end;
      if fSizeRedraw then
        Invalidate;
    end;


    Выполнение SetWindowPos не происходит. Происходит вылет из процедуры и опять останавливаемся в AlignChildrenProc. try-except не помогает...
  • MTsv DN (07.04.09 23:24) [5]
    Все. Обсуждение закрыто!!!
  • SPeller © (08.04.09 02:38) [6]
    Правильно заданный вопрос - больше половины ответа :)
  • Vladimir Kladov © (08.04.09 18:27) [7]
    Ну так и как решили?
  • MTsv DN (08.04.09 18:58) [8]
    Все мой проклятый склероз... Когда-то я уже на эти грабли наступал.
       {$IFNDEF TOOLBAR_FORCE_CHILDALIGN}
    //    if WinVer >= wvNT then << Закоментировал здесь
         Result := TRUE; // this prevents Align working for child controls of Toolbar !
                         // but removing this line makes impossible correct Align for
                         // neighbour controls on form!!!
       {$ENDIF}

  • D[u]fa (09.04.09 15:37) [9]
    Поддержка 9х... жесть)
 
Конференция "KOL" » Мозговой штурм
Есть новые Нет новых   [134431   +15][b:0][p:0.001]