![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 15.01.2012
Сообщений: 67
|
![]()
Кароче. Весь гугл я уже прочитал, ничего не помогло.
Есть программка, в ней объявляю диалог на открытие файла. Объявляю корректно, это проверено. Когда делаю Диалог.Экзекут - вылетает access violation. Путём долгих ковыряний я выяснил, что ошибка пропадает, если перестать использовать один мой самописный класс в другом юните. Интересно то, что перед вызовом диалога я не делаю ничего. Запускается программа, там по созданию формы ничего не происходит, просто инициализируются кинутые на форму визуальные компоненты. Проблемный класс объявлен в приватных (делал и глобальной) переменных формы, создаётся по отдельному событию, не связанному с вызовом диалога и не предшествующим ему. Иду в меню, щёлкаю на пункт вызова диалога - и трындец. Код проблемного класса: Код:
ЧЯДНТ? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
1. В деструкторе вашего класса должно быть уничтожение объектов созданных в классе
2. Объект вашего класса никак форме не указывает, что его нужно уничтожать при уничтожении формы. Или укажите или убивайте объекты при уничтожении формы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 15.01.2012
Сообщений: 67
|
![]()
Не помогло. Даже собственный метод ему написал, который перекрывал базовый деструктор обджекта.
Я тут экспериментировал, сделал тестовый проект в котором заюзал этот модуль. И всё-то там работает. То есть, это в основном проекте я написал какую-то юзалку класса, которая ещё до каких-то действий умудряется что-то поломать. Что там можно такого написать ещё? |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
у вас в названии теме написано одно, а в теме другое.
так где проблема то? где процедура с этим диалогом? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 15.01.2012
Сообщений: 67
|
![]()
Хотите процедуру? А вот она:
Код:
Код:
Сомневаюсь, что стало яснее. Проблема отсутствует на более старых версиях проекта (проверял), хотя там ровно тот же самый предположительно проблемный класс TSQLSource, просто с тех пор что-то было дописано (дополнительные формы, также вызывающие этот класс, но использующие его точно так же, как и те, что сделаны раньше). Проблема исчезает, если я в главной форме удаляю свойство Connection: TSQLSource, а во всех использующих его процедурах прячу строки с коннекшыном под комментарий. Причём, так эти процедуры заведомо работать не будут (например, DBGrid с неприсвоенным датасетом пошлёт при попытке поредактировать данные), но эти процедуры не выполняются перед попыткой вызова диалога, так что ошибок не возникает. И аксес виолейшена - тоже. Стоит только вновь всё раскомментировать и сделать возможной работу с коннекшеном - опять ошибка. Это что, я что-то такое написал, что программа даже компилируется криво? |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
если ошибка возникает при SaveDialog1.Execute(кстати кто проверять результат будет?)
значит у вас не создан этот обьект. не вижу на форме обьявления этого диалога. и соответственно возможно он не создан? вам стоит отладить приложение и выследить причину. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#7 |
Новичок
Джуниор
Регистрация: 12.02.2012
Сообщений: 1
|
![]()
слушайте и помогите как скачать этот файл или скачать http://dsx86.patrickaalto.com/ dsx86.ini
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 15.01.2012
Сообщений: 67
|
![]()
Он кинут на форму в качестве визуального компонента. Следовательно, создан и инициализирован при загрузке. В этом ошибки нет.
|
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]() Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 15.01.2012
Сообщений: 67
|
![]()
Я уже писал - никаких событий перед вызовом компонента не обрабатывается. Вообще. Ни на создание формы, ни на какие-либо действия, совершаемые перед вызовом диалога. Есть обработчики пунктов меню, например - но я вызываю только тот обработчик, который собственно и делает Dialog.Execute.
Проект запросто, только там около сотни килобайт кода в десятке модулей. В аттаче. Прямо вот запускаете и сразу же бежите в "Файл - Загрузить счёт из файла". Там диалог сохранения на самом деле, а не открытия, но это роли не играет - проблема в самом вызове диалога. Другие пункты щёлкать смысла нет - либо не заработает, либо будет ошибка, так как требуется сперва подключиться к базе. |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
access violation | ho_N | Компьютерное железо | 2 | 30.11.2011 08:36 |
access violation после завершения работы процедуры | Dreanks | Помощь студентам | 4 | 15.10.2011 14:02 |
После выгрузки библиотеки Access Violation | evgeso | Общие вопросы Delphi | 0 | 13.02.2011 05:27 |
Что вызывется после Execute у потока? | TwiX | Общие вопросы Delphi | 6 | 06.05.2010 02:03 |
Что происходит с потоком после выполнения процедуры Execute? | TwiX | Общие вопросы Delphi | 7 | 13.12.2009 12:33 |