AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.09.2006, 13:43   #1  
jon is offline
jon
Участник
 
3 / 10 (1) +
Регистрация: 09.06.2005
Как удалить COM объект?
Здравствуйте.
Такой вопрос: создал COM сервер (dll) на фоксе. Работаю в аксапте с ним таким образом:

COM gladelib ;
;
gladelib = new COM("gladelib.Application");
ret = gladelib.SetReserve();
gladelib.detach();

Работает все замечательно, но когда мне приходится перекомпилить dll , возникает ошибка: "File access is denied D:\Project\GladeLib\GladeLib.dll"

Приходится выходить из аксапты, что не очень удобно..
Как же мне все-таки "отпустить" dll ?
Старый 08.09.2006, 13:49   #2  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Попробуйте COM.finalize()
Старый 08.09.2006, 13:56   #3  
jon is offline
jon
Участник
 
3 / 10 (1) +
Регистрация: 09.06.2005
Цитата:
Сообщение от Lucky13
Попробуйте COM.finalize()
Пробовал, не получается, та же ошибка.
Старый 08.09.2006, 14:18   #4  
Jabberwocky is offline
Jabberwocky
Microsoft Dynamics
Аватар для Jabberwocky
Сотрудники Microsoft Dynamics
 
274 / 307 (11) ++++++
Регистрация: 02.09.2005
Адрес: Москва
А зачем вы вызываете gladelib.detach() ? После этого COM-объект пускается в "свободное плавание" и освободить ссылку на объект через gladelib.finalize() Вы уже не сможете.
__________________
You should use Bing before asking dumb questions.
Старый 11.09.2006, 12:57   #5  
jon is offline
jon
Участник
 
3 / 10 (1) +
Регистрация: 09.06.2005
Цитата:
Сообщение от Jabberwocky Посмотреть сообщение
А зачем вы вызываете gladelib.detach() ? После этого COM-объект пускается в "свободное плавание" и освободить ссылку на объект через gladelib.finalize() Вы уже не сможете.
убрал gladelib.detach(), оставил gladelib.finalize().
к сожалению, эффекта нету..
Старый 11.09.2006, 14:46   #6  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
Странно, а если явно присвоить Null после Finalize?
Старый 11.09.2006, 15:43   #7  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Может внутри объекта есть вызовы внутренние и они каким-то образом блокируют dll-ку, тогда аксапта здесь нипричем...
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 11.09.2006, 16:11   #8  
Jabberwocky is offline
Jabberwocky
Microsoft Dynamics
Аватар для Jabberwocky
Сотрудники Microsoft Dynamics
 
274 / 307 (11) ++++++
Регистрация: 02.09.2005
Адрес: Москва
Цитата:
Сообщение от blokva Посмотреть сообщение
Может внутри объекта есть вызовы внутренние и они каким-то образом блокируют dll-ку, тогда аксапта здесь нипричем...
Скорее всего внутри COM-сервера остались неосвобожденные объекты, в этом случае исполняющая система COM (SCM) не может выгрузить COM-сервер из памяти...
__________________
You should use Bing before asking dumb questions.
Старый 11.09.2006, 16:11   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Такое впечатление, что в Axapta'е это сделано специально.

Т.е. при первом создании COM-объекта происходит загрузка dll в память процесса. При этом в таблицу ссылок на открытые модули добавляется вновь созданный. При удалении экземпляра класса COM-объекта эта dll не освобождается, а ссылка на нее остается в памяти. При последующей попытке вызова этой dll просто используется уже загруженный модуль.

Можно принудительно удалить из памяти dll, но при последующей попытке ее загрузить Axapta упадет
__________________
Axapta v.3.0 sp5 kr2
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Kurt Hatlevik: Sneak preview of the WMS E&E Blog bot DAX Blogs 0 20.11.2008 01:10
msdynamicsax: VB script that test the com connector for Dynamics Ax 4.0 Blog bot DAX Blogs 0 25.08.2008 18:05
танцы с бубном - COM Объект не имеет метода 'worksheets' Artem Mikhailov DAX: Программирование 4 05.02.2007 14:25
Объект, как параметр COM-метода Андре DAX: Программирование 10 22.03.2006 18:21

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:56.