![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 12.11.2008
Сообщений: 12
|
![]()
В кратце опишу как устроена программа.
Есть программа с главной формой MDI.К ней подключаются модули (dll), в которых могут быть как объекты, так и формы, назовем их ПМОбъект (Объект из программного модуля). В приложении есть объект ядро, которое загружает модули, создает ПМобъекты, ведет их учет, сообщает ПМобъектам, чтобы те себя уничтожили, и если у программного модуля нет ни одного ПМобъекта, выгружает модуль. Каждый ПМобъект и ядро имеют интерфейс с одной функцией EXEC(aMessageCode:UINT; aParam:WPARAM; bParam:LPARAM):LPARAM; Через нее и происходит все взаимодействие ПМобъектов и ядра, по средствам команд и параметров. При создании ПМобъекта ядро создает объект с различными свойствами этого объекта (например имя, тип) и при его создании ядро получает ссылку на интерфейс для взаимодействия. При создании ПМ объекта формы, создается форма, а форма из модуля создается командой createparented. При необходимости уничтожить ПМобъект ему посылается команда и он выполняет метод self.free. А объект в ядре с его свойствами уничтожается. Вобщем все как-то работает, но я постоянно нарываюсь на ошибку AV, причем природу этой ошибки понять не могу. Все проверял на более простом приложении, там все работало, щас начался геморой, побороть не могу. При необходимости могу выслать исходники, если поможете мне, могу даже указать в авторах программы.Собираемся програму регистрировать в ФИПС-е.Очень буду признателен за помощь. Последний раз редактировалось mihali4; 08.01.2010 в 20:39. |
![]() |
![]() |
![]() |
#2 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]() Цитата:
Предлагаю расставить в этих местах точки записи в лог, тогда проще будет локализовать конкретное место в коде. |
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 12.11.2008
Сообщений: 12
|
![]()
ну с постоянно нарываюсь, я погорячился, простите, писал в сердцах, получаю ее только когда посылаю объектам из модулей команду себя удалить, и они по этой команде выполняют метод self.free. Вообще мне тут сказали что объект не может сам себя удалить, т.е. выполнять такую команду неправильно. Это правда?
|
![]() |
![]() |
![]() |
#4 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Простите, без конкретики дать ответ затруднительно.
Приведите сомнительный кусок кода, включающий в себя создание и уничтожение объекта. Хотя сначала попробуйте обернуть процедуру уничтожения в if exists () then |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 12.11.2008
Сообщений: 12
|
![]()
вообще у меня ссылки на объекты из модулей не хранятся, а только на их интерфейс. И если я хочу удалить объект я ему посылаю команду и по ней этот объект выполняет метод self.free. а потом по идее переменной со ссылкой на этот интерфейс присваиваю nil. но вот именно в этот момент и появляется ошибка.
22:37 Загрузил проект. Там используются различные компоненты, вроде как все есть в общем доступе, но если лень искать просто закоментируйте, чего нет, вроде как на работу не должно влиять.Если нужно будет я и компоненты загружу. У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом. Модератор Последний раз редактировалось mihali4; 08.01.2010 в 22:54. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
обработка объектов при помощи DLL | Kompuklumba | Общие вопросы Delphi | 4 | 06.11.2010 15:20 |
Ошибка при выхове функций Bass.dll из другой DLL | SalasAndriy | Общие вопросы Delphi | 7 | 21.10.2009 23:36 |