Запутался в СОМе...;(
От: Vadimio  
Дата: 11.10.05 08:16
Оценка:
Уважаемые коллеги!

Солкнулся со следующей проблемой, сам понимаю, что туплю, но в чем грабли не пойму.

Есть внутренний сервер автоматизации писанный на Дельфи, соответственно это dll.
В нем есть несколько СОМ-объектов.
Я добавляю еще один объект который использует некоторые методы других объектов.
Соответственно, перегрузив AfterConstruction получаю в нем указатели на нужные мне интерфейсы требуемых объектов с помощью соответствующий фабрик:

procedure TObj4.AfterConstruction;
begin
  inherited;

  Obj1 := CoObj1.Create;
  Obj2 := CoObj2.Create;
  Obj3 := CoObj3.Create;
end;


Все прекрасно, все работает, если бы не одно НО: я зарабатываю недопустимую операцию при завершении приложения

Что бы это могло быть?
Заранее спасибо за конструктив!
Re: Запутался в СОМе...;(
От: AndrewJD США  
Дата: 11.10.05 09:02
Оценка:
Здравствуйте, Vadimio, Вы писали:


V>Солкнулся со следующей проблемой, сам понимаю, что туплю, но в чем грабли не пойму.


V>Соответственно, перегрузив AfterConstruction получаю в нем указатели на нужные мне интерфейсы требуемых объектов с помощью соответствующий фабрик:


V>Все прекрасно, все работает, если бы не одно НО: я зарабатываю недопустимую операцию при завершении приложения


Ты точно освобождаешь все? Похоже у тебя остались живые ссылки на ком объекты
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[2]: Запутался в СОМе...;(
От: Vadimio  
Дата: 11.10.05 11:08
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Ты точно освобождаешь все? Похоже у тебя остались живые ссылки на ком объекты


Я пробовал их освобождать вот так:

procedure TObj4.BeforeDestruction;
begin
  inherited;

  Obj1 := nil;
  Obj2 := nil;
  Obj3 := nil;
end;


Но никакого облегчения это не принесло.
Может быть это связано с тем, что я из самого же сервера обращаюсь к объектам этого же сервера?
Когда я создаю объект в приложении, то загружается dll с сервером, а что происходит, когда я создаю объект этой же dll из другого объекта этой же dll?
Re[3]: Запутался в СОМе...;(
От: AndrewJD США  
Дата: 11.10.05 11:28
Оценка:
Здравствуйте, Vadimio, Вы писали:

V>
V>procedure TObj4.BeforeDestruction;
V>begin
V>  inherited;

V>  Obj1 := nil;
V>  Obj2 := nil;
V>  Obj3 := nil;
V>end;
V>


В Visual Basic — это действительно освобождение в Delphi —
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[3]: Запутался в СОМе...;(
От: Vi2 Удмуртия http://www.adem.ru
Дата: 11.10.05 11:42
Оценка:
Здравствуйте, Vadimio, Вы писали:

V>Я пробовал их освобождать вот так:

V>procedure TObj4.BeforeDestruction;
V>begin
V>  inherited;

V>  Obj1 := nil;
V>  Obj2 := nil;
V>  Obj3 := nil;
V>end;

V>Но никакого облегчения это не принесло.

И правильно — сам объект TObj4 не разрушается вследствие его удержания. Или у тебя точные подозрения именно об этих 3х объектах — Obj1, Obj2 и Obj3? А если не создавать эти объекты и присвоить им nil в AfterConstruction?

V>Когда я создаю объект в приложении, то загружается dll с сервером, а что происходит, когда я создаю объект этой же dll из другого объекта этой же dll?


Ничего не происходит в плане загрузки dll и т.п. Просто создается объект в твоей загруженной DLL.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.