A call to an OS function failed
Причем:
- вылетает даже, если просто запустить приложения, и сразу же закрыть.
- дебагер не помогает, ошибка вылетает уже после того, как отработает основной модуль.
- В WinXP SP1, WinXP SP2, 2003 работает нормально. Вылетает на Win2000 SP 4.
По какой причине может вылетать ошибка? Как узнать, что за функция ОС вызывается?
win2000 сейчас уже постепенно уходит в историю
её щас устанавливают только на старые компьютеры, поэтому можешь не париться.......
Дело в том, что ошибка вылетает после закрытия. Можно спокойно отработать сеанс без ошибок, а когда попытаешься закрыть, она вылетает.
Пытался ковыряться в асемблерном коде (Ctrl+Alt+C), предположительно, ошибка вылетает в процедуре RtlUnwind в ntdll.dll (стоит метка ntdll.RtlUnwind).
2makbeth
Да, я уже столкивался с проблемами с uxtheme.dll на вин2000 и решил эту проблему.
P.S. Программа является частью корпоративной системы, активно работает с БД.
P.S.S. К сожалению, заставить перейти несколько заводов и предприятий на WinXP я не могу. :(
предположительно, ошибка вылетает в процедуре RtlUnwind в ntdll.dll (стоит метка ntdll.RtlUnwind).
Вряд ли, это раскрутчик стека при возникновении исключения.
А вообще, сообщение "A call to an OS function failed" вызывается из SysUtils, когда Win32Check или RaiseLastOSError не находит сообщения об ошибке в своём списке и/или не может получить его от системы через FormatMessage.
:) Буду знать.
Ошибку я локализовал и исправил. Точнее ошибки:
1. Ошибка вылетает, если используется FastReport 4.1. При откате на FasteReport 3.24 все нормально. Справедливости ради, стоит сказать, что компилирую с пакетами исполнения, может без пакетов с FastReport 4 будет нормально.
2. Вторая ошибка, вылетала в секций finalization одного из модулей. В initialization создавалась форма, а в finalization она удалялась. Но, что странно, у меня есть еще один модуль, где таким же образом создается и удаляется форма и он работает без ошибок.
Микрочлены мало где её упоминают, но она используется всеми компиляторами (или большинством).
Не страна, а сплошная откатная. (c) Антимульт.
Возможно, в finalization происходит повторное освобождение формы, удалённой до этого предком, например, Application-ом. Общее правило - формы (и прочие компоненты), создаваемые в глобальных переменных, должны:
- принадлежать Application (или какому-то другому предку) и не иметь явного кода освобождения
- не принадлежать никому (TMyForm.Create(nil)) и иметь код явного освобождения
У меня такой вариант.
Тогда ошибка наведённая - неправильное освобождение памяти происходит в другом месте, а крайней оказывается эта форма.