| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Как удалить 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 ?  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте COM.finalize()
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Lucky13
			
			 
Попробуйте COM.finalize() 
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Microsoft Dynamics 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А зачем вы вызываете gladelib.detach() ? После этого COM-объект пускается в "свободное плавание" и освободить ссылку на объект через gladelib.finalize() Вы уже не сможете.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	You should use Bing before asking dumb questions.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Странно,  а если явно присвоить Null после Finalize?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Пенсионер 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Может внутри объекта есть вызовы внутренние и они каким-то образом блокируют dll-ку, тогда аксапта здесь нипричем...
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	  Законы природы еще никто не отменял!А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Microsoft Dynamics 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Скорее всего внутри COM-сервера остались неосвобожденные объекты, в этом случае исполняющая система COM (SCM) не может выгрузить COM-сервер из памяти...
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	You should use Bing before asking dumb questions.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Такое впечатление, что в Axapta'е это сделано специально. 
		
		
		
		
		
		
			Т.е. при первом создании COM-объекта происходит загрузка dll в память процесса. При этом в таблицу ссылок на открытые модули добавляется вновь созданный. При удалении экземпляра класса COM-объекта эта dll не освобождается, а ссылка на нее остается в памяти. При последующей попытке вызова этой dll просто используется уже загруженный модуль. Можно принудительно удалить из памяти dll, но при последующей попытке ее загрузить Axapta упадет 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 |