2013-11-19 3 views
6

Способ определения того, достиг ли счетчик ссылок COM-объекта 0, путем попытки доступа к одному из его членов и улавливания полученного исключения InvalidComObjectException, которое не очень изящно и, похоже, не хорошо себя зарекомендовало. Другой способ - вызвать Marshal.ReleaseComObject и проверить результат, но это требует, чтобы вы уменьшили количество ссылок объекта Com на 1.как определить, был ли COM-объект отделен от его базового RCW, не полагаясь на исключения?

Есть ли простой способ рассказать?

ответ

2

На форумах .NET этот вопрос задан раньше.

В: Существуют ли какие-либо подходы к получению внутреннего контрольного счета без его уменьшения?

A: Нет методов библиотеки классов, которые могут предоставить эту услугу.

В: Если невозможно получить внутренний счетчик ссылок без его уменьшения, есть ли способ увеличить его счет после вызова Marshal.ReleaseComObject()?

A: Опять же, нет методов библиотеки классов, которые предоставляют эту услугу.

У них есть неудобный способ достижения этого в качестве обходного пути с глобальными API-интерфейсами, экспортированными с вашего COM-сервера.
Подробности здесь: http://social.msdn.microsoft.com/Forums/vstudio/en-US/9de651e0-ad3c-44be-8855-3dc13673ac73/how-can-i-get-the-internal-marshaling-count-of-an-rcw-systemcomobject?forum=clr

Кроме этого, похоже, что вы застряли. Надеюсь, что вам поможет.