Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TIBataBase и DLL [D7, WinXP]


Страницы:   1 2 3

Maxick ©   (2008-03-13 08:55:00) 

Проблема следующего характера: Передовая в ДЛЛ данный объект и поимел проблему: при завершении приложения в главной форме не могу фрикнуть (DB.Free) объект DB=TIBDataBase. Вызывается исключение: Ошибка опирации с указателем. Соответственно, если мне не всвобождать DB (я ее создаю сам), то исключение: "приложение ххх.exe обратилось к адрессу хххх" и т.д.
Собственно вопрос: с чем это связано и как с тим бороться? Варианты типа "обработай сам это исключение" не хотелось бы слюшать.


Сергей М.   (2008-03-13 11:05:00) [41]


> Прав?


Да.


> про дестрой - пробовал - неканает


Это же не редиска, чтобы "канать")


Maxick   (2008-03-13 11:03:00) [42]


> Сергей М. ©   (13.03.08 10:37) [5]


Я так понял, вы про это:
"1. В исх.кодах своих exe- и dll-проектов убираешь все касаемое параметра Appl, т.е. передача этого параметра не нужна вообще.

2. Во всех своих проектах устанавливаешь крыжик
Project->Options..->Packages->Build With Run-Time Packages
и после этого полностью ребилдишь эти проекты.

Все !! Больше никаких телодвижений делать не нужно."
Прав?
А про Крейт - дошло :). А про дестрой - пробовал - неканает.


Сергей М.   (2008-03-13 10:37:00) [43]


> и в событии OnClose главной формы
> db.free;


Разве это логично ?

Уж если объект создан тобой сразу после конструирования формы (OnCreate), то и уничтожать его, очевидно, следует непосредственно перед разрушением этой формы (OnDestroy).


> DB.Create(self);


А это что еще за фигня ?
Разве DB у тебя объявлен как TComponentClass ?


Сергей М.   (2008-03-13 10:24:00) [44]


> Maxick


http://www.delphimaster.ru/cgi-bin/forum.pl?id=1205238747&n=0


Maxick   (2008-03-13 10:17:00) [45]

забыл добавить, что при динамической загрузке длл также используется соглашение stdcall.


Maxick   (2008-03-13 10:15:00) [46]

IntruderLab, Можно будет и попробовать. Я так понимаю, при передачи объекта (указателя) в длл и происходитв вся эта бодяга. В длл у меня форма и работа с базой (таблицы и т.п.). Форма вызывается модально и после высвобождается, но хвост от TIBDataBase остается. Причем, это единственный обект с такой траблой на моей памяти.
Текст в длл:

function xxx(app:TApplication; db: TIBDataBase): boolean; stdcall;
var
 hdll: TApplication;
begin
 hdll:= application;
 application:= app;
 DataBase:= db;  
 fmForm:= TfmForm.Create(Application);
 fmForm.ShowModal;
 fmForm.Free;
 application:= hdll;


Соответственно вызов:

...
DB.Create(self);
...
//тут динамическая загрузка длл
...
xxx(Application,db);
...
//и в событии OnClose главной формы
db.free;

Весь фокус еще в том, что если фрикать в процедуре (OnCreate главной формы), где создавалась db (там же и функцию из длл вызывать) то нет проблем совсем.


IntruderLab   (2008-03-13 09:05:00) [47]

как вариант используй CoInitialize() и CoUnInicialize(), ShareMem прописаны в главной форме и в dll


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо