-
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]Правильно заданный вопрос - больше половины ответа :)
-
Ну так и как решили?
-
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х... жесть)