|
|
|
EAccessViolation
|
|||
|---|---|---|---|
|
#18+
Ситуация. Форма. Работаю с IBX-библиотекой. C++ Builder5. При закрытии формы выдаётся сообщение EAccessViolation at address 4077E558. Пытаюсь оттрассировать. После обработчика OnFormDestroy передаётся управление в деструктор. Из деструктора передаётся в модуль systdate.h И эксцепшен выбивает на строке __fastcall TDateTime(const double src) {Val = src;} Я в упор не могу понять причём здесь этот модуль. Кто-нибудь такое встречал? Или 5 Билдер глючный? Просьба ответ продублировать на ruslan2507@mail.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 00:04 |
|
||
|
EAccessViolation
|
|||
|---|---|---|---|
|
#18+
RuarkСитуация. Форма. Работаю с IBX-библиотекой. C++ Builder5. При закрытии формы выдаётся сообщение EAccessViolation at address 4077E558. Пытаюсь оттрассировать. После обработчика OnFormDestroy передаётся управление в деструктор. Из деструктора передаётся в модуль systdate.h И эксцепшен выбивает на строке __fastcall TDateTime(const double src) {Val = src;} Я в упор не могу понять причём здесь этот модуль. Кто-нибудь такое встречал? Или 5 Билдер глючный? Просьба ответ продублировать на ruslan2507@mail.ru Может , что перед деструкором формы что удаляешь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 08:39 |
|
||
|
EAccessViolation
|
|||
|---|---|---|---|
|
#18+
JibSkeart RuarkСитуация. Форма. Работаю с IBX-библиотекой. C++ Builder5. При закрытии формы выдаётся сообщение EAccessViolation at address 4077E558. Пытаюсь оттрассировать. После обработчика OnFormDestroy передаётся управление в деструктор. Из деструктора передаётся в модуль systdate.h И эксцепшен выбивает на строке __fastcall TDateTime(const double src) {Val = src;} Я в упор не могу понять причём здесь этот модуль. Кто-нибудь такое встречал? Или 5 Билдер глючный? Просьба ответ продублировать на ruslan2507@mail.ru Может , что перед деструкором формы что удаляешь ? Дело в том что OnFormDestroy работает как надо. На одну из причин этих глюков наткнулся. Использую TQuery совместно TUpdateSQL. RefreshSQL не задаю. Сохраняю данные. После этого возникает этот глюк. Лечится полным удалением TUpdateSQL с формы, перекомпиляцией проекта, потом добавляю TUpdateSQL вновь, заполняю уже все тексты SQL. И работает. Это особенности работы TUpdate SQL или глюки Билдеров 5,6? Но возникает этот глюк ещё в ряде момэнтов. Каких - понять не могу. Те же проблемы возникают и в C++ Builder 6. КТО С ТАКИМ СТАЛКИВАЛСЯ??? Есть ли инфа, в какие модули лезет деструктор формы, и какие переменные он вытягивает? Я трассировал деструктор. Он лезет в 2 модуля, но что он пытается вытащить оттуда - не знаю. Буду рад ссылкам на факи, если таковые имеются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 23:30 |
|
||
|
EAccessViolation
|
|||
|---|---|---|---|
|
#18+
Думаю в случае с VCL происходит ПРИБЛИЗИТЕЛЬНО следующее 1) надо вызвать деструкторы всех компанентов, что накиданы на форме. Т.е. деструктор скорее всего бежит по массиву Components и вызывает их деструкторы. Массив этот "упорядочен" по CreationOrder, т.е. убиваться компаненты будут в порядке обратном их создания. 2) после этого вызываются деструкторы всех членов класса. Ну мало ли что накидано внутри класса формы. 3) потом вызываются деструкторы всех базовых классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2005, 09:20 |
|
||
|
EAccessViolation
|
|||
|---|---|---|---|
|
#18+
RuarkИ эксцепшен выбивает на строке __fastcall TDateTime(const double src) {Val = src;} Я в упор не могу понять причём здесь этот модуль. Понять, при чем здесь этот модуль, поможет стек вызовов. Крайне сомнительно, что деструктор лезет сюда напрямую - скорее всего, происходит достаточно сложное взаимодействие, типа того, что какой-нибудь TDateTimePicker перед смертью пытается отправить в DataSet последнее введенное пользователем значение. RuarkИспользую TQuery совместно TUpdateSQL. RefreshSQL не задаю. Сохраняю данные. После этого возникает этот глюк. Лечится полным удалением TUpdateSQL с формы, перекомпиляцией проекта, потом добавляю TUpdateSQL вновь, заполняю уже все тексты SQL. И работает. Это особенности работы TUpdate SQL или глюки Билдеров 5,6? Очень странно. TQuery в дизайн-тайме открыт? (Active = true). Если держать его закрытым, никакого взаимодействия вообще не должно быть. dwlДумаю в случае с VCL происходит ПРИБЛИЗИТЕЛЬНО следующее Насколько я понимаю, должно происходить то же, что и в Delphi, с учетом разной реализации объектной модели. В Delphi обычно происходит следующее: деструктор Destroy (с точки зрения сишника его можно назвать псевдодеструктором) уничтожает члены класса, после чего вызывает родительский Destroy. В принципе, возможен и обратный подход, но принято обращаться к родительскому деструктору в конце. Деструктор класса TComponent делает следующее. Прежде всего, он выставляет всем принадлежащим компонентам флаг csDestroying. Затем он рассылает оповещения о своем уничтожении тем, кто выразил заинтересованность узнать об этом событии. После чего он грохает принадлежащие компоненты. Мораль: в стандартной модели компонент может получить сообщение (вызов метода) в тот момент, когда он уже пришиб своих членов, но при этом у него будет стоять флаг уничтожения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2005, 14:55 |
|
||
|
EAccessViolation
|
|||
|---|---|---|---|
|
#18+
softwarer RuarkИ эксцепшен выбивает на строке __fastcall TDateTime(const double src) {Val = src;} Я в упор не могу понять причём здесь этот модуль. Понять, при чем здесь этот модуль, поможет стек вызовов. Крайне сомнительно, что деструктор лезет сюда напрямую - скорее всего, происходит достаточно сложное взаимодействие, типа того, что какой-нибудь TDateTimePicker перед смертью пытается отправить в DataSet последнее введенное пользователем значение. Интересно, а это как-то можно увидеть? То есть пытавется кто-то что-то загнать или нет? RuarkИспользую TQuery совместно TUpdateSQL. RefreshSQL не задаю. Сохраняю данные. После этого возникает этот глюк. Лечится полным удалением TUpdateSQL с формы, перекомпиляцией проекта, потом добавляю TUpdateSQL вновь, заполняю уже все тексты SQL. И работает. Это особенности работы TUpdate SQL или глюки Билдеров 5,6? Очень странно. TQuery в дизайн-тайме открыт? (Active = true). Если держать его закрытым, никакого взаимодействия вообще не должно быть. Всё закрыто. Используется IBX библиотека, компоненты TIBDataBAse, TIBTransaction, TIBQuery, TIBUpdateSQL. Соответственно каждый ссылается друг на друга. TIBDataBAse я всегда держу в десигне закрытым. Соответственно и все IBQuery закрыты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2005, 23:36 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32915573&tid=2033718]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
182ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 532ms |

| 0 / 0 |
