.NET+COM
От: Аноним  
Дата: 07.06.04 16:31
Оценка:
Здравствуйте

Есть 2 библиотеки. Одна написана на с++. Вторая — на с#. Библиотека с++ импортирует библиотеку с# как СОМ.
Есть одна проблема: библиотека СОМ не выгружается из памяти не при каких условиях?

Как можно выгрузить СОМ?
Re: .NET+COM
От: TK Лес кывт.рф
Дата: 07.06.04 17:03
Оценка:
Hello,
>
> Есть 2 библиотеки. Одна написана на с++. Вторая — на с#. Библиотека с++ импортирует библиотеку с# как СОМ.
> Есть одна проблема: библиотека СОМ не выгружается из памяти не при каких условиях?
>
> Как можно выгрузить СОМ?

Нужно освобождать все ссылки. В COM это делается через Release, а в .NET полезно вызывать Marshal.ReleaseComObject
Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: .NET+COM
От: oleg123  
Дата: 08.06.04 07:10
Оценка:
Здравствуйте, TK, Вы писали:

TK>Hello,

>>
>> Есть 2 библиотеки. Одна написана на с++. Вторая — на с#. Библиотека с++ импортирует библиотеку с# как СОМ.
>> Есть одна проблема: библиотека СОМ не выгружается из памяти не при каких условиях?
>>
>> Как можно выгрузить СОМ?

TK>Нужно освобождать все ссылки. В COM это делается через Release, а в .NET полезно вызывать Marshal.ReleaseComObject


Дело в том, что я делаю Release, но библиотека СОМ все равно висит в памяти. Выгружается только после перезагрузки компьютера.
Re[3]: .NET+COM
От: Bugs Беларусь  
Дата: 08.06.04 07:28
Оценка:
Здравствуйте, oleg123, Вы писали:

TK>>Нужно освобождать все ссылки. В COM это делается через Release, а в .NET полезно вызывать Marshal.ReleaseComObject


O>Дело в том, что я делаю Release, но библиотека СОМ все равно висит в памяти. Выгружается только после перезагрузки компьютера.


Да, есть такое дело. Тоже сталкнулся и ничего не понимаю. Выгрузить com объект можно, только через спец. программу, например я пользуюсь "process view". Остальные пишут доступ запрещен и все тут. Может кто нибудь объясинт в чем фикус ?!
... << Rsdn@Home 1.1.4 beta 1 >>
Re: .NET+COM
От: mihailik Украина  
Дата: 08.06.04 16:22
Оценка: 9 (2)
А>Как можно выгрузить СОМ?

Если я правильно понял, то ты очень хочешь выгрузить C#-библиотеку из "приплюснутого" приложения.

В этом случае можно срубить домен, AppDomain.Unload. Правда при таких раскладах произойдёт полная деинициализация всех дотнетовских объектов.



Наверняка, тебе больше подойдёт следующий способ. Дотнетовская среда может грузить библиотеки в режиме Shadow-Copy. При этом она вообще не блокирует файлы DLL на диске, просто считывает, загружает сборку и "отпускает" файл — хоть удаляй, хоть что хочешь.

Чтобы включить такой режим, есть два способа.

1. Unmanged Hosting API. Нужно будет создать или открыть текущий домен, установить для него какие-то функции. Смотри в MSDN и h-файлы вот здесь:
Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\include

2. Можно включить эту фишку "из дотнета": AppDomain.SetShadowCopyFiles(). При использовании C++ Managed Extensions это делается легко.
... << Rsdn@Home 1.1.4 beta 1 >>
Re: .NET+COM
От: Sl1der Россия  
Дата: 08.06.04 18:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте


А>Есть 2 библиотеки. Одна написана на с++. Вторая — на с#. Библиотека с++ импортирует библиотеку с# как СОМ.

А>Есть одна проблема: библиотека СОМ не выгружается из памяти не при каких условиях?

А>Как можно выгрузить СОМ?


У меня была похожая проблема. Был dll-модуль, к программе подключался через com, после закрытия программы процесс не завершался. Я тогда сделал ReleaseComObject, но не помогло(интересно почему????)
А стал выгружаться только после принидительной сборки мусора GC.Collect, когда запускалась функция unlink для модуля(я думаю понятно примерно, что имелось ввиду под unlink)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.