Привет!
Большое MDI приложение на VB6 (более сорока ActiveX Control и ActiveX DLL проектов; так же используются следующие контролы других разработчиков: EasyScroll, Janus GridEX 2000, MDI ActiveX).
На компьютере установлено: Windows 2000 sp2, VB6 sp5.
С помощью Wise Install Master делается инсталляционная версия программы и устанавливается на другой "чистый" (только Windows, больше ничего) компьютер.
Некоторое время работаем в программе (тестируем) и затем закрываем ее. После того как зарываются все окна программы получаем сообщение: "This Program Has Caused a Fatal Exception : and Will Be Terminated"
Попытался разобраться с этой ошибкой. Принудительно перед закрытием MDIForm закрываю все другие окна, закрываю все соединения с СУБД, уничтожаю все объекты (set object = nothing). Переопределяю событие главной (MDI form) формы:
Private Sub MDIForm_Terminate()
DestroyObjects
MsgBox "Пока все нормально"
End
End Sub
Так вот при закрытии программы сначала получаю сообщение "Пока все нормально", а затем "This Program Has Caused a Fatal Exception : and Will Be Terminated". Т.е. ошибка возникает, когда уже весь мой код на VB выполнен.
Так же пробовал следующее в одной из форм поместил кнопку Command1 и переопределил событие Command1_Click
Private Sub Command1_Click()
End
End Sub
Если немного поработать в программе и затем нажать на кнопку получаю все тоже сообщение о Fatal Exception.
Ошибка не возникает под VB IDE. Часто возникает под Windows 9x и Windows2000. Очень редко возникает под Windows NT 4.
Внимание, вопрос: как сделать так чтобы это сообщение об ошибке не появлялось?
Хорошо, если кто укажет на причину ее возникновения и способ(ы) устранения.
Но подойдет так же совет как избавиться от окна с сообщением "This Program Has Caused a Fatal Exception : and Will Be Terminated". Ведь программа все равно уже закрыта пользователем, весь мой код выполнен и нам с пользователем от операционной системы уже ничего не нужно. А сообщение "на посошок" раздражает.
Спасибо
Re: This Program Has Caused a Fatal Exception при закрытии
Здравствуйте retiv, Вы писали:
R>Привет! R>Большое MDI приложение на VB6 (более сорока ActiveX Control и ActiveX DLL проектов; так же используются следующие контролы других разработчиков: EasyScroll, Janus GridEX 2000, MDI ActiveX).
R>Внимание, вопрос: как сделать так чтобы это сообщение об ошибке не появлялось?
А кто выводит сообщение о данной ошибке?
R>Хорошо, если кто укажет на причину ее возникновения и способ(ы) устранения.
R>Но подойдет так же совет как избавиться от окна с сообщением "This Program Has Caused a Fatal Exception : and Will Be Terminated". Ведь программа все равно уже закрыта пользователем, весь мой код выполнен и нам с пользователем от операционной системы уже ничего не нужно. А сообщение "на посошок" раздражает.
Если этим занимается Windows, то его заткнет вызов WinAPI функции SetErrorMode
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: This Program Has Caused a Fatal Exception при закрытии
Здравствуйте Vi2, Вы писали:
Vi2>Попробуй убрать оператор End, как недостойный для такого большого приложения.
Именно он гадюка все и портит !
Уже много раз встречался с этой проблеммой.
Выход: Либо совсем забыть про End , либо выносить его за пределы _Unload или _Terminate, т.е. вызывать по таймеру отдельно от уничтожения формы.
Re[3]: This Program Has Caused a Fatal Exception при закрыти
Здравствуйте BugMan, Вы писали:
Vi2>>Попробуй убрать оператор End, как недостойный для такого большого приложения.
BM>Именно он гадюка все и портит ! BM>Уже много раз встречался с этой проблеммой. BM>Выход: Либо совсем забыть про End , либо выносить его за пределы _Unload или _Terminate, т.е. вызывать по таймеру отдельно от уничтожения формы.
Оператор End оказался там во время моих попыток решить эту проблему. Забыл убрать. Программа падала и до него
Re[4]: This Program Has Caused a Fatal Exception при закрыти
Здравствуйте retiv, Вы писали:
R>Оператор End оказался там во время моих попыток решить эту проблему. Забыл убрать. Программа падала и до него
Ну тогда тебе нужно разбираться что к чему, для твоей же пользы. Как правило, программа на VB достаточно корректно выходит. А просто "затыкание" сообщения заталкивает проблему вглубь, не решая проблемы.
Помочь сам не могу, потому как не имею твоих прибамбасов в виде EasyScroll, Janus GridEX 2000, MDI ActiveX
Протестируй эти штучки отдельно, постепенно наращивая функциональность. Сомнения вызывает и сама функция DestroyObjects. Возможно это и полезная штучка, но уж больно грозно называется.
Здравствуйте retiv, Вы писали:
R>Привет! R>Большое MDI приложение на VB6 (более сорока ActiveX Control и ActiveX DLL проектов; так же используются следующие контролы других разработчиков: EasyScroll, Janus GridEX 2000, MDI ActiveX). R>На компьютере установлено: Windows 2000 sp2, VB6 sp5. R>С помощью Wise Install Master делается инсталляционная версия программы и устанавливается на другой "чистый" (только Windows, больше ничего) компьютер. R>Некоторое время работаем в программе (тестируем) и затем закрываем ее. После того как зарываются все окна программы получаем сообщение: "This Program Has Caused a Fatal Exception : and Will Be Terminated"
R> ...
R>Спасибо
Была похожая ошибка при использовании в проект элемента управления GTTabCtl (изготовитель GreenTree). Исправили ошибку заменой элемента управления на его аналог от Майкрософта.
Возможно, в вашем случае все портит, какой-то другой элемент управления ...
Для выявления виновника мы воспользовались отладчиком VC: на чистую машину устанавливается студия в минимальной конфигурации (по сути только среда VC++), запускаем приложение, подключаем отладчик, для всех типов исключений, устанавливаем флаги "Stop if not handled".
В момент появления необработанного исключения, просматриваем стек вызовов, ... Виновным, наверняка, является один из модулей упомянутых в стеке, хотя не обязательно верхний.
Re[5]: This Program Has Caused a Fatal Exception при закрыти
Здравствуйте Vi2, Вы писали:
>Как правило, программа на VB достаточно корректно выходит.
Грязная клевета !!!
Мой опыт именно в этом вотросе достаточно велик. Как и предлагалось кем то здесь я тоже по началу пытался заткнуть собссно сообщение об ошибке, и мне это удалось.... почти.... пока не попробовал на XP......
Т.е. если прога валится и без End , по понятное дело это не он виноват, а кто то из "друзей" лежащих на форме. Но вот если вызывать End на анлоаде последней формы (особенно если на ней всякой фигни понавешанно) , то это Fatal Exeption воникает почти в 100% случаев. Хуки там какието не закрываются или что — хер его знает......
Re[6]: This Program Has Caused a Fatal Exception при закрыти
Здравствуйте BugMan, Вы писали:
Vi2>Как правило, программа на VB достаточно корректно выходит. BM>Грязная клевета !!!
Я может зря недописАл выражение "выходит и без оператора END", ясное из контекста, чем, наверное, и вызвал такой всплеск эмоций.
BM>Т.е. если прога валится и без End , по понятное дело это не он виноват, а кто то из "друзей" лежащих на форме. BM>Но вот если вызывать End на анлоаде последней формы (особенно если на ней всякой фигни понавешанно) , то это Fatal Exeption воникает почти в 100% случаев. Хуки там какието не закрываются или что — хер его знает......
И даже в последнем случае VB не виноват. Как контейнер, он пытается сделать то, что ты его заставляешь — аварийно завершиться, уже не заботясь о каких-либо приличиях. И если VB не обрубает просто-напросто твоё приложение, как это сделал бы Task Manager, а пытается ещё что-то сделать корректное на выходе, освобождая определённые ресурсы, то Fatal Exception — это ещё меньшее из зол, возможных при аварийном выходе из программы.
Здравствуйте Vi2, Вы писали:
>VB достаточно корректно выходит ... выходит и без оператора END
ммммммм...... Тоже не совсем правда......
[skip] >Your program closes as soon as there are no other programs holding references to objects created from your public class modules and no code executing
Ну с классами и формами то я думаю всё понятно, а вот в "no code executing" кроется гаденькая подковырка......
ЗЫ: Пожалуйста не надо записывать меня в рады тех кто всё время кричит типа "MS (VB) SUXXX" и т.д. VB — прекраснейший тул для штамповки интерфейсов, но в данном случае проблемма налицо
Re: This Program Has Caused a Fatal Exception при закрытии