Здесь есть дополнительный уровень косвенности. Да, RCW ведет единый подсчет ссылок на родных указателях интерфейса COM. Но у RCW также есть счетчик ссылок, он увеличивается каждый раз, когда указатель COM-интерфейса отображается на RCW. Что может произойти, если метод COM возвращает указатель на интерфейс. Финализатор соответствующего класса-оболочки .NET уменьшает его.
Вы можете возиться с этим счетчиком ссылок непосредственно через Marshal.ReleaseComObject (), который уменьшает его на единицу, как это делает финализатор, и Marshal.FinalReleaseComObject (), который обнуляет его, гарантируя, что IUnknown :: Release () метод называется. Они, конечно, попадают в категорию «лучше знать, что ты делаешь». Неправильное и некорректное создание «COM-объекта, отделенного от лежащего в его основе RCW», исключение.